首先,请原谅的问题,它可能是一个简单的问题,但我有麻烦了解的加密方法..mcrypt_encrypt乱码
我使用下列功能加密/解密:
private function encodemc($value,$skey){
if(!$value){return false;}
$skey = substr($skey, 2, 4);
$text = $value;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $skey, $text, MCRYPT_MODE_ECB, $iv);
return trim($this->safe_encode($crypttext)); // safe_encode adds another encoding using `base64_encode`
}
private function decodemc($value,$skey){
if(!$value){return false;}
$skey = substr($skey, 2, 4);
$crypttext = $this->safe_decode($value);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $skey, $crypttext, MCRYPT_MODE_ECB, $iv);
return trim($decrypttext);
}
$key
看起来像这样:570c45546dwq45gjk191
。
我将要加密的值传递给第一个函数,然后将其保存到数据库,然后从数据库中检索它,然后解密并将其显示为html文本。
问题是某些文本没有得到解密/加密的权利,并且它显示在html页面中,就好像它是错误的文本编码。
怪异的部分是10个项目中,只有2或3个是乱码,取决于密钥。 另外,有时候只有一部分字符串会出现乱码。
我发现是什么原因造成的嘟are是一些随机字母。例如,当使用上述密钥时,字母S
会破坏代码并且文本会变成乱码。
因此,我已将substr($skey, 2, 4);
应用于密钥以查看是否有任何更改。原来,如果我改变密钥,破坏代码的字符是不同的。
但即使使用长度为1的键,问题仍然存在。
有什么想法是什么问题?
编辑:
下面的代码的其余部分。
private function safe_encode($string) {
$data = base64_encode($string);
$data = str_replace(array('+','/','='),array('-','_',''),$data);
return $data;
}
private function safe_decode($string) {
$data = str_replace(array('-','_'),array('+','/'),$string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4);
}
return stripslashes(base64_decode($data));
}
我们还需要'safe_encode'和'safe_decode'函数的代码。我打赌,这不是他们就是打破事情的'修剪'。 – Charles
如果这两个safe_en/decode函数只会执行base64编译/解码操作,那么您将不会为它创建函数,对吗? – hakre
'stripslashes'!如果你发现自己需要它,就会出现问题。 – Charles