md5 php 加密后乱码_PHP md5函数 的16位字符乱码问题解决-阿里云开发者社区
亂碼
PHP的md5函數用于對字符串參數進行md5運算,該函數有兩個參數:
md5 ( string $str [, bool $raw_output = FALSE ] ) : string
第一個參數是輸入字符串;第二個參數默認為FALSE,設置為TRUE時可以輸出16位的md5值。
默認情況下,md5(string $str) 會返回:32 字符、十六進制數字形式的散列值。
如果加上第二個參數 md5(string $str,TRUE) 則返回:16字節長度的原始二進制格式的散列值。
由此我們看出,當返回16字節長度(對應16個字符,因為符合ASCII)的二進制格式時,由于瀏覽器對其進行了字符化處理,由此就會產生亂碼:
$str = "PHP";
echo "字符串:".$str."
";
echo "TRUE - 原始 16 字符二進制格式:".md5($str,TRUE)."
";
echo "FALSE - 32 字符十六進制格式:".md5($str)."
";
解決
那么如何得到不亂碼的16位md5值呢?有兩種方法:
對輸出的16字節的二進制轉化為十六進制;
md5的密文中,16位密文與32位密文的第8-24位子字符串是一樣的,所以我們就可以通過截取的方式:substr(md5($str),8,16)來獲得16個字符的md5密文了。其中第二個參數和第三個參數代表從第8個字符開始(下標從0開始),取16個字符。
這里我們用第二個方法來解決亂碼問題。還是以上面的例子:
$str = "PHP";
echo "字符串:".$str."
";
echo "TRUE - 原始 16 字符二進制格式(亂碼):".md5($str,TRUE)."
";
echo "TRUE - 原始 16 字符二進制格式(不亂碼):".substr(md5($str),8,16)."
";
echo "FALSE - 32 字符十六進制格式:".md5($str)."
";
備注:而如果需要大寫的md5值,直接使用strtoupper(…)函數即可。
作者:doctorrm
鏈接:PHP md5函數 的16位字符亂碼問題解決
來源:編程日志
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的md5 php 加密后乱码_PHP md5函数 的16位字符乱码问题解决-阿里云开发者社区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年度最佳开源软件榜单出炉!
- 下一篇: 关于php的梗儿_php几个不起眼儿的小