【问题标题】:PHP & Java Decrpytion error using PhpSecLib and BouncyCastle使用 PhpSecLib 和 BouncyCastle 的 PHP 和 Java 解密错误
【发布时间】:2013-07-05 21:28:38
【问题描述】:

我正在尝试使用我的 PHP 生成的公钥加密 java 中的内容:

PHP 代码

    $rsa = new Crypt_RSA();
    $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
    $rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PKCS1);
    $rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_PKCS1);


    $keys = $rsa->createKey(1024);
    extract($keys);

    echo (base64_encode($publickey));

出于测试目的,我预留了上述格式的密钥对(base64)。

我在 java 中检索我的公钥并对其进行 base64 解码。

    String publicKeyDecoded = new String(Base64.decode(publicKey));
    PEMParser pr = new PEMParser(new StringReader(publicKeyDecoded));
    Object obj = pr.readObject();
    pr.close();
    SubjectPublicKeyInfo spki = (SubjectPublicKeyInfo) obj;
    AsymmetricKeyParameter askp = PublicKeyFactory.createKey(spki);

    AsymmetricBlockCipher e = new RSAEngine();
    e = new org.bouncycastle.crypto.encodings.PKCS1Encoding(e);
    e.init(true, askp);

    byte[] messageBytes = plainText.getBytes();
    byte[] encryptedData = e.processBlock(messageBytes, 0, messageBytes.length);
    byte[] encryptedDataBase = Base64.encode(encryptedData);

我使用以下命令将 Base64 加密的明文发送回 PHP 进行解密:

    $rsa->loadKey($privatekey) or die ("Cant load");
    echo $rsa->decrypt($cipher);        

它无法解密我的编码消息并抛出错误:

    Decryption error in <b>/opt/lampp/htdocs/Crypt/RSA.php</b> on line <b>2120</b>

有人能指出我正确的方向吗?自从我试图弄清楚这一点以来已经有几个小时了。

我使用的是硬编码的密钥对,所以我想我的密钥没有问题...

【问题讨论】:

  • 您在创建密钥时在 PHP 中设置加密模式。你是在解密密文的时候设置的吗?

标签: java php security bouncycastle phpseclib


【解决方案1】:

回答我自己的问题:

除了最终解密 PHP 之外的一切都是正确的。

应该是:

    $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
    $rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PKCS1);
    $rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_PKCS1);

    $rsa->loadKey(base64_decode($_SESSION['private'])) or die ("Cant load");
    echo $rsa->decrypt(base64_decode($cipher));

我忘记对从 java 发送的加密文本进行 un-base64 处理并设置加密模式。

谢谢纽伯特。

【讨论】:

  • 这是经过三天多的反复试验后唯一有帮助的答案,感谢@karthik!
猜你喜欢
  • 1970-01-01
  • 2021-03-22
  • 2012-06-02
  • 2019-01-26
  • 2011-10-22
  • 2012-10-25
  • 2013-10-10
  • 1970-01-01
  • 2019-06-18
相关资源
最近更新 更多