PHP md5関数の16ビット文字化け問題の解決方法

藏色散人
リリース: 2023-03-04 16:52:01
オリジナル
4044 人が閲覧しました

php md5 16 ビット文字化けの解決策: 1. 出力された 16 バイトのバイナリを 16 進数に変換します; 2. "substr(md5($str),8,16)" メソッドを使用して 16-文字MD5暗号文。

PHP md5関数の16ビット文字化け問題の解決方法

# 推奨: 「

PHP ビデオ チュートリアル

#文字化け

PHP の md5 関数は、文字列パラメーターに対して md5 操作を実行するために使用されます。この関数には 2 つのパラメーターがあります:

md5 ( string $str [, bool $raw_output = FALSE ] ) : string

最初のパラメータは入力文字列です。2 番目のパラメータのデフォルトは FALSE です。TRUE に設定すると、16 ビットの md5 値を出力できます。

デフォルトでは、
md5(string $str)

は 32 文字の 16 進数のハッシュ値を返します。 2 番目のパラメータ md5(string $str,TRUE)
を追加すると、長さが 16 バイトの元のバイナリ形式のハッシュ値が返されます。

このことから、16 バイト長のバイナリ形式 (ASCII に準拠しているため 16 文字に相当) が返されると、ブラウザがそれを特徴付けるため、文字化けが発生することがわかります。 :
$str = "PHP";
echo "字符串:".$str."<br>";
echo "TRUE - 原始 16 字符二进制格式:".md5($str,TRUE)."<br>";
echo "FALSE - 32 字符十六进制格式:".md5($str)."<br>";
ログイン後にコピー

PHP md5関数の16ビット文字化け問題の解決方法

解決策

それでは、文字化けしない 16 ビットの md5 値を取得するにはどうすればよいでしょうか?

出力された16バイトバイナリを16進数に変換する方法
  1. md5の暗号文において、16ビット暗号文と32ビット暗号文の違い 第8回から 24 番目の部分文字列は同じであるため、
  2. substr(md5($str),8,16)
  3. をインターセプトすることで 16 文字の md5 暗号文を取得できます。第 2 パラメータと第 3 パラメータは 8 文字目(添字は 0 から)から 16 文字を表します。
  4. ここでは、文字化けの問題を解決するために 2 番目の方法を使用します。上記の例を引き続き使用します:
$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>";
ログイン後にコピー

PHP md5関数の16ビット文字化け問題の解決方法

注: 大文字の md5 値が必要な場合は、strtoupper(...) 関数を直接使用してください。

以上がPHP md5関数の16ビット文字化け問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート