【问题标题】:How do decrypt Bouncy Castle (AES/CBC) data in PHP?如何在 PHP 中解密 Bouncy Castle (AES/CBC) 数据?
【发布时间】:2013-09-16 01:59:17
【问题描述】:

我们有一些文件是使用 Java Bouncy Castle 的“PBEWITHSHA256AND128BITAES-CBC-BC”算法加密的。

在 PHP 中使用 PHP 解密这些文件的最佳库是什么?

【问题讨论】:

  • 在 php 中使用 mcrypt,但我不确定细节

标签: java php encryption cryptography bouncycastle


【解决方案1】:

AES 解密可以通过这个来完成:

function decrypt($encrypted, $key, $iv) {
    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
    $padSize = ord(substr($decrypted, -1));
    return substr($decrypted, 0, $padSize*-1);
}

$key$iv$encrypted 应该是二进制字符串。

substr 和 pad size 检测是必要的,因为 128BITAES-CBC-BC 使用 PHP 的 mcrypt 函数不支持的 PKCS5 填充(PHP 总是用零填充)。

较难的部分将是计算加密密钥。 Bouncy Castle 的PBEWITHSHA256 使用PKCS12 和SHA256 来派生密钥。这里的问题是我不知道(也无法找到)该算法在 PHP 中的任何实现,老实说,我认为你不会找到。如果您的所有数据都使用单个密钥加密,我建议调试 Bouncy Castle 库并在加密/解密过程开始时提取密钥字节。如果您在org.bouncycastle.crypto.engines.AESFastEngine 类的generateWorkingKey(byte[], boolean) 方法中设置断点,您应该能够捕捉到密钥。

【讨论】:

    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2011-12-16
    • 2017-09-28
    • 1970-01-01
    • 2011-01-26
    • 2013-08-11
    相关资源
    最近更新 更多