【发布时间】:2013-06-06 04:50:59
【问题描述】:
我正在使用文本
const ENCRYPTION_KEY = '3aa22e01c04c7059778c54d122b0273689fba00f4a166a66d15f7ba6a8ba8743';
$str = "1844427316My Name Is Dave1336407610774000000000000";
function encrypt($str){
trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,ENCRYPTION_KEY, $str,MCRYPT_MODE_CBC,mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC),MCRYPT_RAND))));
}
function decrypt($encryptedtext){
return trim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
ENCRYPTION_KEY,
base64_decode($encryptedtext),
MCRYPT_MODE_CBC,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_128,
MCRYPT_MODE_CBC
),
MCRYPT_RAND
)
)
);
}
但是,每当我用上述值刷新调用这些函数的页面时,我都会得到不同的值加密,但在解密时,初始解密值每次都会改变,但其余部分会像明智地一样正确解密:
F7…Ÿ{4©eŠQ9t¤e 是 Dave1336407610774000000000000
我也参考了SIMILAR QUESTION并在解密中使用了“iv”功能并在其中回答了
有人可以指导我这里出了什么问题吗?
【问题讨论】:
-
每次收到的密文值不同是正常的。这实际上是算法的一部分,并使其更加安全。
-
好的,但是不正确的解密初始文本怎么办......??
-
恐怕我不知道,否则我会发布答案。作为一种解决方法,您可以尝试填充加密数据(开头有空格)。这可能与您使用
trim函数有关。尝试删除它。 -
否定...我也试过了。
-
@quinxorin 检查我的答案我解决了...
标签: php mcrypt rijndael cbc-mode