首頁 >後端開發 >PHP問題 >如何解決php md5產生16位元出現亂碼問題

如何解決php md5產生16位元出現亂碼問題

藏色散人
藏色散人原創
2021-05-28 09:15:443389瀏覽

php md5出現16位元亂碼的解決方法:1、將16位元組的原始二進位格式碼轉為十六進位;2、採取「substr(md5($str),8,16) ;」截取的辦法解決亂碼問題。

如何解決php md5產生16位元出現亂碼問題

本文操作環境:Windows7系統、PHP7.1版,DELL G3電腦

php使用md5函數產生16位元md5值回傳亂碼的原因以及解決方法

一直以來都是使用32位的md5碼,最近有個需求是要用16位md5碼,查了php官方手冊,採用如下方式生成md5碼,結果卻返回亂碼。

$code = md5($str,true);//$code是乱码

又仔細的看了眼手冊,手冊中關於第二個參數的描述是:如果可選的raw_output 被設定為TRUE,那麼MD5 報文摘要將以16位元組長度的原始二進制格式返回。

而對於md5函數的預設回傳值定義是:以32字元十六進位數字形式傳回雜湊值。

也就是說,我們平常使用md5回傳的是32位元組長度的十六進位數字形式,如果第二個參數設定為true回傳的是16位元組長度的原始二進位格式。雖然有點繞口,但很顯然兩種返回格式是完全不同的,因此也導致了亂碼的產生。

解決方法有兩種,一是將這個16位元組的原始二進位格式碼轉為十六進位;二是採取截取的辦法,因為一個值的32位元md5碼的第8到24位元和16位元md5的字串是一樣的。

附解決方法二碼:

$code = substr(md5($str),8,16);//$code是16位的md5码。

推薦學習:《PHP影片教學

以上是如何解決php md5產生16位元出現亂碼問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn