26

文字列から MD5 ハッシュを取得する必要があります。
エラー MD5 is null を取得します。
文字列から 32 文字の MD5 ハッシュを取得しようとしています。

using (System.Security.Cryptography.MD5 md5 = 
       System.Security.Cryptography.MD5.Create("TextToHash"))
{
    byte[] retVal = md5.Hash;
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < retVal.Length; i++)
    {
        sb.Append(retVal[i].ToString("x2"));
    }
}
4

3 に答える 3

52

文字列から MD5 ハッシュを取得する必要があります。

次に、まず文字列を何らかの形式でバイナリ データに変換する必要があります。それをどのように行うかは、要件によって異なりますが、おそらく何らかのエンコーディング用になるでしょうEncoding.GetBytes...ただし、どのエンコーディングを解決する必要があります。たとえば、このハッシュは別の場所で作成されたハッシュと一致する必要がありますか?

エラー MD5 is null を取得します。

MD5.Create間違った使い方をしているからです。引数はアルゴリズム名です。ほとんどの場合、代わりにパラメーターなしのオーバーロードを使用する必要があります。

次のようなものが必要だと思います:

byte[] hash;
using (MD5 md5 = MD5.Create())
{
    hash = md5.ComputeHash(Encoding.UTF8.GetBytes(text));
}
// Now convert the binary hash into text if you must...
于 2012-10-19T17:17:32.387 に答える
24

に渡される文字列Createは、「ハッシュするテキスト」ではなく、使用するアルゴリズムです。私はあなたが欲しいと思う:

using (System.Security.Cryptography.MD5 md5 = 
   System.Security.Cryptography.MD5.Create())
{
    byte[] retVal = md5.ComputeHash(Encoding.Unicode.GetBytes("TextToHash"));
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < retVal.Length; i++)
    {
        sb.Append(retVal[i].ToString("x2"));
    }
}
于 2012-10-19T17:18:16.223 に答える
1

null戻り値を取得する理由は、ハッシュされているテキストではなく、アルゴリズムを指定するメソッドstringへのパラメーターです。CreateTextToHash アルゴリズムがないためnull、戻り値として取得します。

于 2012-10-19T17:19:19.287 に答える