2011-11-08 8 views
2

古いコードを再利用し、このコードを使ってSHA1ハッシュを生成していたことがわかりました。 SHA1 generation on .net

HashAlgorithm sha = new SHA1CryptoServiceProvider(); 
return sha.ComputeHash((new UnicodeEncoding()).GetBytes(password.Trim())); 

私は、私は例えば、でテストしたときと同じハッシュで終わるませんSHA1ハッシュを生成するために、次のコードを使用

正しいものであるhttp://gtools.org/tool/sha1-hash-generator/

ここで何か問題がありますか?

答えて

4

おそらくエンコードの違いです。あなたはUTF-16を使用しています。 UTF-8を試してください。

このサイトではUTF-8が使用されていることが確認されました。しかし、それらのコードはSQLエスケープを介して入力するため、'などの特定の文字については、そのコードが壊れています。

しかし、平易なSHA-1でパスワードをハッシュすることは、決して正しい選択ではありません。サイトへのログインに使用されるパスワードの保存など、ほとんどの場合、PBKDF2、bcrypt、適切なsaltでの暗号化などの適切なパスワードハッシュ関数を使用する必要があります。

PBKDF2は、SHA-1塩漬けのRfc2898DeriveBytes Class

+2

は "... SHA-1の*播種されていない単一*アプリケーションがなることはほとんどありません" ことを確認してください – Richard

+0

入力いただきありがとうございます! SSLを介してのみ実行する場合もそうですか? –

+1

@nj。 SSLは、このコンテキストでは無関係です。パスワードは、盗まれたデータベースから保護するために、dbに格納されているためです。ネットワーク経由で送信されたパスワードはハッシュされるべきではなく、SSLで保護されるべきです。 – CodesInChaos

0

例では、.NETで実装されています

return Convert.ToBase64String(
    new HMACSHA1(
     Encoding.UTF8.GetBytes(salt)) 
    .ComputeHash(
     Encoding.UTF8.GetBytes(input))); 
+0

私の理解は、この機能がMACとして設計されていることです。それは、それが速いことを意味します。それを遅くするために反復スキームを使用する必要があります。これはまさにPBKDF2の機能です。 – CodesInChaos