【发布时间】:2018-04-11 11:11:55
【问题描述】:
我的一个网站上有一个加密功能,它在 PHP 5.3.29 上运行 该函数在此版本的 PHP 上正常工作。功能是:
function encrypt($text) {
return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, SALT, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
}
我有另一个在 PHP 5.6.29 上运行的网站。在此版本上,相同的函数不会返回任何内容。它返回空白。
同样,我有解密功能,它也不适用于 PHP 5.6.29
function decrypt($text) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, SALT, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}
我需要让这个函数在 PHP 5.6.29 上工作,因为我的网站是通过 API 连接的。我不知道如何使它起作用。有什么帮助吗?
【问题讨论】:
-
解构你的函数调用,看看哪个没有返回预期的结果。前任。试试 base64_decode, mcript_get_iv_size, ... 这样一旦你找到哪一个,你可以在文档中查找它,看看有什么变化。
-
mcrypt_decrypt中使用的mcrypt_create_iv不会创建一个新的 IV,而不是使用原始文本加密的那个吗?同样在加密字符串上运行trim可能会删除重新创建它所需的数据。 -
@apokryfos 是的。但 ECB 模式不使用 IV;它们被忽略了,如果你提供它们没有区别。这也是欧洲央行不好的原因。
-
@Narf,很抱歉,但我想我无法解释自己。实际上我还没有将 SALT 值存储在数据库中。我的意思是说我已经使用上述功能将密码和其他重要的东西存储在数据库中。我有一个全局变量,它作为 SALT 的值,我在需要的地方使用该全局变量。您能否稍微解释一下您所说的 SALT 的“正确值”是什么意思?
-
@YunusAslam 此外,您展示的小代码中存在大量问题,但从您上次的评论来看,您似乎完全走错了路。用户密码必须是散列,而不是像你正在做的那样加密 - 再次,不同的事情。
标签: php encryption php-5.3 mcrypt php-5.6