1 回答

TA貢獻2041條經(jīng)驗 獲得超4個贊
關(guān)于Jasypt代碼,必須考慮以下幾點:
PBEWithHMACSHA512AndAES_256
使用PBKDF2,即通過摘要、密碼、鹽和迭代計數(shù)導出加密/解密密鑰,即解密也需要這些參數(shù)。算法和摘要可以直接導出:AES-256和SHA-512。作為操作模式,應(yīng)用 CBC。由于隨機生成的鹽,發(fā)布的代碼每次都會生成不同的密文。用戶定義的鹽可以傳遞給類似于 IV 的
PooledPBEStringEncryptor
實例:textCryptor
textCryptor.setSaltGenerator(new?StringFixedSaltGenerator(<YourSalt>));
Jasypt使用塊大小(AES 為 16 字節(jié))作為鹽大小。較小的鹽會導致異常,較大的鹽會被簡單地截斷。
IV 的處理類似于鹽:較小的 IV 導致異常,較大的 IV 被截斷。
如果未使用 顯式設(shè)置迭代計數(shù)
PooledPBEStringEncryptor#setKeyObtentionIterations(<iteration count>)
,1000
則默認使用。Jasypt需要一個 ASCII 字符串作為密碼(只是為了完整性,因為發(fā)布的代碼確實如此)。
使用 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 關(guān)注
- 207 瀏覽
添加回答
舉報