1 回答
TA贡献2041条经验 获得超4个赞
关于Jasypt代码,必须考虑以下几点:
PBEWithHMACSHA512AndAES_256
使用PBKDF2,即通过摘要、密码、盐和迭代计数导出加密/解密密钥,即解密也需要这些参数。算法和摘要可以直接导出:AES-256和SHA-512。作为操作模式,应用 CBC。由于随机生成的盐,发布的代码每次都会生成不同的密文。用户定义的盐可以传递给类似于 IV 的
PooledPBEStringEncryptor
实例:textCryptor
textCryptor.setSaltGenerator(new StringFixedSaltGenerator(<YourSalt>));
Jasypt使用块大小(AES 为 16 字节)作为盐大小。较小的盐会导致异常,较大的盐会被简单地截断。
IV 的处理类似于盐:较小的 IV 导致异常,较大的 IV 被截断。
如果未使用 显式设置迭代计数
PooledPBEStringEncryptor#setKeyObtentionIterations(<iteration count>)
,1000
则默认使用。Jasypt需要一个 ASCII 字符串作为密码(只是为了完整性,因为发布的代码确实如此)。
使用 Salt,JasyptA16bytesSalt_012
代码提供以下密文:。可以使用 PHP 解密此密文,如下所示:Lg01eeYnujbof0Wy9rs3XQ==
hash_pbkdf2
<?php
$salt = 'A16bytesSalt_012'; // First 16 bytes of the salt used in Jasypt code
$iv = 'some_random_word'; // First 16 bytes of the IV used in Jasypt code
$iterations = 1000; // Jasypt default
$password = array(110, 88, 100, 72, 113, 70, 103, 55, 52, 103, 50, 50, 103, 52, 86, 113); // Password used in Jasypt code
$password = implode(array_map("chr", $password));
$key = hash_pbkdf2("sha512", $password, $salt, $iterations, 32, TRUE);
$data = 'Lg01eeYnujbof0Wy9rs3XQ=='; // Ciphertext from Jasypt code
$method = "aes-256-cbc"; // Algorithm and mode used in Jasypt code
echo openssl_decrypt($data, $method, $key, 0, $iv);
?>
- 1 回答
- 0 关注
- 111 浏览
添加回答
举报