首先,請原諒的問題,它可能是一個簡單的問題,但我有麻煩了解的加密方法..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