【发布时间】:2013-12-15 21:06:17
【问题描述】:
我的数据库中有 336 个“客户”
我将这段代码尝试到encrypt 然后decrypt 一些数据
esit 是:正确:323 - 错误:13
mcrypt 不完全可逆的原因是什么?
编辑:请不要试图改变问题的性质,问我的问题,否则我会否决你的答案。这个算法的问题似乎不是 100% 可逆的,这就是问题所在,问题不是我使用它的原因
$wrong = $right = 0;
foreach ($clients as $c) {
$string_to_encode = trim($c->first_field . ":::" . $c->last_field);
$mc_key = Yii::app()->params["rijndael_key"];
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv_1 = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypt = trim(mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$mc_key,
$string_to_encode,
MCRYPT_MODE_ECB,
$iv_1));
$token = urlencode(base64_encode($crypt));
$string_to_decode = base64_decode(urldecode($token));
$string_decoded = trim(mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
$mc_key,
$string_to_decode,
MCRYPT_MODE_ECB,
$iv_1));
if ($string_to_encode != $string_decoded) {
echo $string_to_encode . PHP_EOL;
echo "***** ERROR ! ***** " . PHP_EOL;
echo $string_to_encode . PHP_EOL;
echo $string_decoded . PHP_EOL;
$wrong ++;
} else {
$right ++;
}
}
echo "Right $right - Wrong $wrong" . PHP_EOL;
与普通字符串和解码字符串的区别示例[请注意我更改了登录名....]
customer.email@alice.it:::11734
customer.email@alice.it:::11z͉\wo����y�+� �>�d��x�
算法不是 100% 可逆的。这就是问题,这就是问题......显然我不会在生产中使用它......这只是向你演示这个算法有问题的一个案例
【问题讨论】:
-
加密算法要么可逆,要么不可逆。它不会随意决定只有某些数据是不可逆的。
-
是的,我知道......但是这段代码 100% 的时候得到了“一些”没有正确描述的字符串。有什么想法吗?
-
无论如何,您都不应该对密码使用可逆算法。始终对密码使用不可逆的哈希算法。
-
也许
trim()是您的问题的原因?我不会认为修剪加密函数的输出是明智的。 -
是否有可能使用的函数之一失败并返回false,导致以后出现问题?
crypt_create_iv和mcrypt_get_iv_size都可以在失败时返回 false。
标签: php encryption mcrypt