我试图加密一个数组,然后通过调用一个函数将其解密回字符串,如果我在函数中一次加密和解密,似乎会返回正确的值,但是,如果我返回加密值,然后再次调用函数解密它会返回一些奇怪的代码。mcrypt_decrypt返回奇怪的代码
实施例1:
public main()
{
$dataArray = array("one"=>1, "two"=>2, "three"=>3);
$a = $this->encryptDecryptInfo(json_encode($dataArray),$this->key);
var_dump($a);
}
public function encryptDecryptInfo($text,$key)
{
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,
$text= base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv));
return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($text), MCRYPT_MODE_CFB, $iv);
}
这将返回我正确的值,它是串(27) “{” 一 “:1,” 2 “:2”,3 “:3}”
例2:
public main()
{
$dataArray = array("one"=>1, "two"=>2, "three"=>3);
$a = $this->encryptDecryptInfo(json_encode($dataArray),$this->key,"encrypt");
$b = $this->encryptDecryptInfo($a,$this->key,"decrypt");
var_dump($b);
}
public function encryptDecryptInfo($text,$key,$type)
{
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB), MCRYPT_RAND);
if($type == "encrypt")
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv));
else return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($text), MCRYPT_MODE_CFB, $iv);
}
但是,如果我这样做我的代码,它将返回我奇怪的值,它是这样的字符串(27)“ÔérôŸYEX gíœÈÐN*é౜CμÖ“。
Deos任何人都知道为什么会发生这种情况?编码加密和解密都与例1和例2相同,但为什么它会在例子中返回奇怪的代码呢?有什么办法解决这个问题?
@Ivo Sabev嗯...任何方式,我可以解决这个问题? – 2010-04-09 05:20:36
看看我附加的链接的评论。如果您不需要UTF或查看网页的中间位置,则可以将文件更改为ANSI我指出存在UTF安全的BASE64类 - http://www.php.net/manual/en/function .base64-encode.php#78765 – 2010-04-09 05:31:31
这与编码无关。显然,OP使用两个不同的初始化向量(IV)来解密和解密字符串 - 这是行不通的。请参阅stereofrog关于将IV与加密数据一起保存的答案。 – 2010-04-09 07:15:25