php md5 16位元字元亂碼的解決方法:1、對輸出的16位元組的二進位轉換為十六進位;2、透過“substr(md5($str),8,16)”方法來獲得16個字元的md5密文。
推薦:《PHP影片教學》
亂碼
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."<br>"; echo "TRUE - 原始 16 字符二进制格式:".md5($str,TRUE)."<br>"; echo "FALSE - 32 字符十六进制格式:".md5($str)."<br>";
解決
#那麼如何得到不亂碼的16位元md5值呢?有兩種方法:
- 對輸出的16位元組的二進位轉換為十六進位;
- md5的密文中,16位元密文與32位元密文的第8-24位子字串是一樣的,所以我們就可以用截取的方式:
substr(md5($str),8,16)
來得到16個字元的md5密文了。其中第二個參數和第三個參數代表從第8個字元開始(下標從0開始),取16個字元。
這裡我們用第二個方法來解決亂碼問題。還是以上面的範例:
$str = "PHP"; echo "字符串:".$str."<br>"; echo "TRUE - 原始 16 字符二进制格式(乱码):".md5($str,TRUE)."<br>"; echo "TRUE - 原始 16 字符二进制格式(不乱码):".substr(md5($str),8,16)."<br>"; echo "FALSE - 32 字符十六进制格式:".md5($str)."<br>";
備註:而如果需要大寫的md5值,直接使用strtoupper(…)函數即可。
以上是如何解決PHP md5函數的16位元字亂碼問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。