【发布时间】:2021-04-14 09:00:28
【问题描述】:
我正在尝试在 java 中编写一个加密函数,它类似于下面提到的 php 和 node 中的函数:
openssl_public_encrypt($gzipped_string_to_encrypt, $encrypt_data, $key_string, OPENSSL_PKCS1_OAEP_PADDING);
和
const crypto = require('crypto');
const result = crypto.publicEncrypt({
key: key,
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING
}, gzippedStringToEncrypt);
主要问题是 - 我找不到 RSA_PKCS1_OAEP_PADDING 参数的正确 java 类似物。 我是这样试的:
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA1AndMGF1Padding", BouncyCastleProvider.PROVIDER_NAME);
val oaepParameterSpec = new OAEPParameterSpec("SHA-1", "MGF1", MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT);
val encryptionKey = Base64.decodeBase64(keyString);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec publicSpec = new X509EncodedKeySpec(encryptionKey);
Key key = keyFactory.generatePublic(publicSpec);
cipher.init(Cipher.ENCRYPT_MODE, key, oaepParameterSpec);
encrypted = cipher.doFinal(gziped);
但是结果不能用成功解密php和node函数结果的函数解密。
【问题讨论】:
-
您是否尝试过类似问题的答案? stackoverflow.com/questions/17110217/…
-
无法在我的机器上重现。所有代码都将 SHA1 用作 MGF1 和 OAEP 的摘要并且是兼容的。你做错了其他事情。发布一个完整的示例,以便可以进行复制,请参阅MCVE。
-
Topaco,你是对的 - 我“做错了其他事情”。
标签: java encryption rsa