2012-04-11 16 views
-1

暗号化されたパスワード(md5)をSQLデータベースに送信していました。ちなみに、私は整数列にmd5暗号化を送った。入力したパスワードは「テスト」でデータベースには「5」と表示され、「qwertyqwerty」のパスワードが入力され、「2147483647」と表示されました。 ?なぜint値が大きく異なるのですか?MD5パスワードがINTのmysqlフィールドに送信されました

+1

2147483647は、SIGNED INT列の最大値です。 – Interrobang

+0

なぜパスワードハッシュにmd5を使用しますか? PBKDF2またはbcryptは標準的な選択肢です。 – CodesInChaos

答えて

1

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

ハッシュは、与えられた入力を受け取り、予測可能な出力を生成する(つまり、与えられた入力は常に同じ出力を持つ)一方向関数であり、理想的には非常に似通った入力でさえ、

MD5ハッシュは128ビットです。これらの128ビットを32ビットのSQL列に書き込もうとすると、確実に切り詰めが行われます。

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

+0

それは故意ではなく、iveが問題を解決しました(私はmd5でそれを望みます、本当の暗号化は必要ありません)。しかし、情報をありがとう! –

0

なぜ私は最初の値が5(私はハッシュを参照する必要があります)が現れたと言うことはできませんが、2番目の値は整数列が保持できる最大値なので、

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

関連する問題