2016-11-04 14 views
2

旧アイデンティティシステムで作成されたパスワードを持つデータベースがあります。パスワードはMD5CryptoServiceProviderクラスを使用してハッシュされました。私は今ASP.NET MVCコアでこれらのパスワードを使用する必要がありますが、MD5CryptoServiceProviderは存在しません。ASP.NETコアのMD5CryptoServiceProvider

.NET Frameworkでは、私はハッシュを計算するために使用される機能は次のとおりです。

public static string CreateHash(string unHashed) 
{ 
    var x = new System.Security.Cryptography.MD5CryptoServiceProvider(); 
    var data = Encoding.ASCII.GetBytes(unHashed); 
    data = x.ComputeHash(data); 
    return Encoding.ASCII.GetString(data); 
} 

私はASP.NETのコアに、以下の2つの機能を試してみた:

public static string CreateHash(string unHashed) 
{ 
    var x = new System.Security.Cryptography.HMACMD5(); 
    var data = Encoding.ASCII.GetBytes(unHashed); 
    data = x.ComputeHash(data); 
    return Encoding.ASCII.GetString(data); 
} 

public static string MD5Hash(string input) 
{ 
    using (var md5 = MD5.Create()) 
    { 
     var result = md5.ComputeHash(Encoding.ASCII.GetBytes(input)); 
     var strResult = BitConverter.ToString(result); 
     return strResult.Replace("-", ""); 
    } 
} 

どちらのメソッドも、最初のメソッドでMD5CryptoServiceProviderクラスと同じ文字列を返しません。新しいパスワードを使用するようにデータベース全体を変更することはできません。

これに対する修正?二つの問題がここにあります

答えて

10

まず、あなたが戻って文字列にバイト配列を変換するために、異なる方法を使用しています。あなたの第一及び第二の方法では、あなたがあなたの第3の方法で

return Encoding.ASCII.GetString(data); 

を使用し、使用:

var strResult = BitConverter.ToString(result); 
return strResult.Replace("-", ""); 

をこれらは、出力と同じ結果をしません。第2の例で使用される方法は実際には同一であるが、第2の例で使用される方法は実際には同じではない。

要するに、3番目のオプションを使用しますが、同じメソッドを使用して、最初の例で使用した文字列に戻します(

)。
public static string MD5Hash(string input) 
{ 
    using (var md5 = MD5.Create()) 
    { 
     var result = md5.ComputeHash(Encoding.ASCII.GetBytes(input)); 
     return Encoding.ASCII.GetString(result); 
    } 
} 
+0

あなたはとても仲がいいです...ありがとう。それは金曜日だ。午後5:00... –