【发布时间】:2021-10-28 04:05:15
【问题描述】:
这是我在 PHP 5.6 中完美运行的旧代码
function AESencrypt($decrypted, $password, $salt)
{
$block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$padding = $block - (strlen($decrypted) % $block);
$decrypted .= str_repeat(chr($padding), $padding);
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $password, $decrypted , MCRYPT_MODE_CBC, $password));
$encrypted = hash('SHA256', $encrypted.'|'.$salt, true);
return strToHex($encrypted);
}
$hashkey= AESencrypt("input","password", "salt");
然后我切换到 PHP 7.4,但该功能无法正常工作,因此我尝试将其转换为 OpenSSL,但它不会产生 有效的哈希键
新代码在这里
function AESencrypt($decrypted, $password, $salt)
{
$padding = 16 - (strlen($salt) % 16);
$salt .= str_repeat("\0", $padding);
$block = 16;
$padding = $block - (strlen($decrypted) % $block);
$decrypted .= str_repeat(chr($padding), $padding);
$cipher = (mb_strlen($password, '8bit') <= 8) ? 'aes-128-cbc' : 'aes-256-cbc';
$encrypted = base64_encode(
openssl_encrypt($decrypted, $cipher, $password, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $password)
);
$encrypted = hash('SHA256', $encrypted.'|'.$salt, true);
return strToHex($encrypted);
}
$hashkey = AESencrypt("input","password", "salt");
strToHex()在这里
function strToHex($string){
$hex = '';
for ($i=0; $i<strlen($string); $i++){
$ord = ord($string[$i]);
$hexCode = dechex($ord);
$hex .= substr('0'.$hexCode, -2);
}
return strToUpper($hex);
}
我已经尝试了上一个问题中给出的解决方案,但它仍然显示 invalid hash key
【问题讨论】:
-
您的填充不同。这也是一个非常奇怪的哈希函数。
标签: php encryption openssl aes mcrypt