PHP AES加密后出現亂碼解決
在使用PHP對數據進行AES加密后,可能會出現加密文本顯示為亂碼的情況,這時候我們需要對加密后的文本進行解密,同時在解密的過程中需要指定編碼格式為UTF-8,代碼如下:
$text = '這是要加密的文本'; $key = '這是密鑰'; $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); mcrypt_generic_init($cipher, $key, $iv); $encrypted = mcrypt_generic($cipher, $text); mcrypt_generic_deinit($cipher); $text = base64_encode($encrypted); echo $text; // iQITQgIecnyuxO30KmJfZJGhPlg==
此時我們在頁面上輸出加密后的文本,可以看到文本被正確加密并且轉換成base64編碼的形式。
但是在進行解密時,可能會出現亂碼的情況,這是因為PHP默認的編碼格式是ISO-8859-1,而我們在加密時使用了UTF-8的編碼格式,導致解密時出現亂碼。解決這個問題的方法是在解密時指定編碼格式為UTF-8,代碼如下:
$encrypted = base64_decode('iQITQgIecnyuxO30KmJfZJGhPlg=='); $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); mcrypt_generic_init($cipher, $key, $iv); $text = mdecrypt_generic($cipher, $encrypted); mcrypt_generic_deinit($cipher); $text = mb_convert_encoding($text, 'UTF-8', 'ISO-8859-1'); echo $text; // 這是要加密的文本
在解密時指定編碼格式為UTF-8后,可以正確地將加密后的文本解密并轉換成UTF-8格式,從而避免了出現亂碼的情況。
總之,在進行PHP AES加密時,需要注意編碼格式的問題,尤其是在解密時需要指定編碼格式為UTF-8,這樣才能保證加密后的文本能夠正確顯示。
上一篇php aes ofb
下一篇php aes java