私が働いている会社は、大型注文処理システムのサポート契約を結んでいます。最初のシステム監査の一環として、私は、データベースに格納されたパスワードが実際にはパスワードのハッシュコードであることに気付きました。基本的にGetHashCodeを使用してユーザーのパスワードを「安全」にする
:
string pwd = "some pasword";
string securePwd = pwd.GetHashCode();
私の質問は、これはどのように安全なかそうでないのか?
私はそれに慣れていませんが、GetHashCodeの仕組みについては十分に分かりません。私はMD5ハッシュのようなものを使うことを好むでしょうが、私が時間を無駄にしているなら、私は気にしません。
SHA1とMD5が壊れていませんか? –
壊れた定義方法によって異なります。衝突する値を計算する方法はよく知られていますが(少なくとも私はMD5でこの事例は確信していますが)、それが役に立たないわけではありません。ほとんどの場合、塩漬けのMD5でもパスワードを保存するのに十分です。それらの「壊れた」属性は、デジタル署名にはるかに影響します。 –
ああ、私は、どのような意味でも、MD5またはSHA1の使用を推奨していません。 Mitchの言ったように、SHA256以上のハッシュアルゴリズムを使用してください。私のコメントの全体的なポイントは、 "壊れた"ものでした。暗号化アルゴリズムでは、broken = deadとなります。しかし、ハッシュアルゴリズムでは、少し灰色の領域があります。 –