【问题标题】:Java analogue of php or node encryption functionphp或节点加密功能的Java模拟
【发布时间】: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


【解决方案1】:

问题中的例子是正确的。它提供了一个可以正确解密的输出。

【讨论】:

    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 2019-09-09
    • 2014-01-20
    • 1970-01-01
    • 2017-10-20
    • 2019-12-15
    • 2014-09-18
    • 2021-09-30
    相关资源
    最近更新 更多