0

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

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

4

1 回答 1

3

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 大小检测是必要的,因为128BITAES-CBC-BC使用 PHPmcrypt函数不支持的 PKCS5 填充(PHP 总是用零填充)。

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

于 2013-09-11T22:52:37.413 回答