そのため、PHPのハッシュ関数に少し奇妙な問題があります。それは時々起こるだけで、それが私を混乱させています。基本的に、私はJavaアプリとPHPページを持っており、どちらも同じ文字列のSHA256を計算します。(一般的に)同じハッシュを計算するため、2つの間で問題は発生していません。唯一の例外は、PHPの出力がJavaの出力より1文字長い場合があることです。
私はPHPでこのコードを持っています:
$token = $_GET["token"];
$token = hash("sha256", $token."<salt>");
echo "Your token is " . $token;
99%の確率で、適切なハッシュを取得します。しかし、時々、私は次のようなものを取得します(違いを示すためにスペースが追加されています):
26be60ec9a36f217df83834939cbefa33ac798776977c1970f6c38ba1cf92e92 # PHP
26be60ec9a36f217df83834939cbefa33ac798776977c197 f6c38ba1cf92e92 # Java
ご覧のとおり、ほぼ同じです。しかし、一番上のもの(PHPによって計算されたもの)には、何らかの理由でもう1つ0があります。韻や理由はあまり気づいていませんが、確かに困惑しています。間違ったエンコーディングや間違った戻り値などを考えてみましたが、その1文字を除いて、ほとんど同じである理由を実際に説明しているものはありません。
この問題に関する助けをいただければ幸いです。
編集:余分な0がどこにあるかを強調するために、スペースは一番下のスペースにのみあります。実際のハッシュにはスペースがなく、Javaが生成するものと同じであるため、実際に有効なハッシュです。
EDIT2:それについては申し訳ありません。Notepad ++で長さを確認しましたが、通常のテキストエディタとは異なるため、長さを1つ読み間違えました。そうです、一番上のものは確かに正しいです。これは、私のJavaコードのバグであることを意味します。イグナシオの答えを探り、あなたに返事をします。