使用新的php版本加密解密问题

时间:2017-10-30 12:55:07

标签: php encryption php-5.3 mcrypt php-5.6

我的一个网站上有一个加密功能,运行在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连接的。我不知道如何让它工作。有什么帮助吗?

2 个答案:

答案 0 :(得分:2)

您可能为SALT传递了错误的值。从手册:

  

不再接受无效的密钥和iv尺寸。 mcrypt_encrypt()现在将抛出警告,如果输入无效,则返回FALSE。之前的键和IV都填充了' \ 0'字节到下一个有效大小。

这是对PHP 5.6的更改,它与您所看到的一致。

请注意,加密密钥与散列盐不同,散列盐通常可以是任意长度。

答案 1 :(得分:0)

我认为您在使用SALT时遇到问题。如果你将给出32个字符的SALT,那么这些函数也会在PHP 5.6.29中给出输出。