我们有一些文件是使用Java Bouncy Castle的"PBEWITHSHA256AND128BITAES-CBC-BC"算法加密的。
在 PHP 中使用什么库来使用 PHP 解密这些文件?
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
使用 PKCS5 填充,而 PHP 的 mcrypt
函数不支持(PHP 总是用零填充)。
更难的部分是计算加密密钥。Bouncy Castle的PBEWITHSHA256
使用PKCS12和SHA256来派生密钥。这里的问题是我不知道(并且无法找到)PHP中该算法的任何实现,老实说,我认为您不会找到一个。如果您的所有数据都使用单个密钥加密,我建议您调试 Bouncy Castle 库并在加密/解密过程开始时提取密钥字节。如果在 org.bouncycastle.crypto.engines.AESFastEngine
类的 generateWorkingKey(byte[], boolean)
方法中设置断点,则应该能够捕获密钥。