-1

暗号化されたパスワード (md5) を SQL データベースに送信していました。誤って、md5 暗号化を整数列に送信しました。入力したパスワードは「test」で、データベースでは「5」と表示され、「qwertyqwerty」のパスワードを実行すると「2147483647」と表示されました。好奇心から、これで何が起こっているのか誰か説明してもらえますか? int の値が大きく異なるのはなぜですか?

4

2 に答える 2

1

MD5 はパスワードを暗号化せず、ハッシュします。

ハッシュは、特定の入力を受け取り、予測可能な出力を作成する一方向関数です (つまり、特定の入力は常に同じ出力になります)。

MD5 ハッシュは 128 ビットです。これらの 128 ビットを 32 ビットの SQL 列に書き込もうとすると、切り捨てが確実に発生します。

MD5 を生成し、それを整数に変換してから SQL に書き込むために使用した特定のコードを理解しないと、なぜあるケースでは小さい数値が得られ、別のケースでは最大値が得られたのかを理解することはできません。符号付き整数。コードを投稿したい場合は、喜んでコメントします。

于 2012-04-11T23:06:12.493 に答える
0

最初の値が 5 として表示された理由はわかりません (ハッシュを確認する必要があります) が、整数列が保持できる最大値であるため、2 番目の値が表示されました。

mysql が文字列 MD5 ハッシュを整数に変換した (またはしようとした) ときに、整数が保持できる最大値を超えたため、代わりに最大整数を保存しました。

于 2012-04-11T23:07:13.660 に答える