86

バイト配列であるハッシュ結果を文字列に変換するにはどうすればよいですか?

byte[] bytePassword = Encoding.UTF8.GetBytes(password);

using (MD5 md5 = MD5.Create())
{
    byte[] byteHashedPassword = md5.ComputeHash(bytePassword);
} 

文字列に変換する必要がありbyteHashedPasswordます。

4

7 に答える 7

85
   public static string ToHex(this byte[] bytes, bool upperCase)
    {
        StringBuilder result = new StringBuilder(bytes.Length*2);

        for (int i = 0; i < bytes.Length; i++)
            result.Append(bytes[i].ToString(upperCase ? "X2" : "x2"));

        return result.ToString();
    }

次に、それを拡張メソッドとして呼び出すことができます。

string hexString = byteArray.ToHex(false);
于 2010-03-12T20:40:59.440 に答える
66

私はいつもこれが最も便利だと思っていました:

string hashPassword = BitConverter.ToString(byteHashedPassword).Replace("-","");

いくつかの奇妙な理由で、BitConverterはバイトの間にダッシュを入れるのが好きなので、置換はそれらを削除するだけです。

更新:「小文字」の16進数が必要な場合は、.ToLower()とブームを実行してください。

これをタイトなループとして実行し、多くの操作を行う場合、少なくとも2つの暗黙的な文字列のキャストとサイズ変更が行われるため、これはコストがかかる可能性があることに注意してください。

于 2010-03-12T20:49:30.420 に答える
29

とを使用Convert.ToBase64StringConvert.FromBase64Stringて、バイト配列を文字列に簡単に変換できます。

于 2010-03-12T20:40:57.193 に答える
21

「Hexpreference」キャンプにいる場合は、これを行うことができます。これは基本的にPhilippeLeybaertによる回答の最小バージョンです。

string.Concat(hash.Select(x => x.ToString("X2")))

B1DB2CC0BAEE67EA47CFAEDBF2D747DF

于 2013-12-22T01:57:37.290 に答える
9

ハッシュであるだけでなく、通常の文字列では表示できない値が含まれている可能性があるため、Base64でエンコードされた文字列に変換することをお勧めします。

string s = Convert.ToBase64String(bytes);

と使用

byte[] bytes = Convert.FromBase64(s);

バイトを取り戻すため。

于 2010-03-12T20:41:05.587 に答える
5

ええと、バイトとエンコーディングをとる文字列コンストラクターを使用することもできますが、文字列には楽しい文字(nullバイト、改行、制御文字など)がたくさん含まれている可能性があるため、文字列の管理が難しくなる可能性があります。

これを行うための最良の方法は、base 64でエンコードして、操作しやすい素敵な文字列を取得することです。

string s = Convert.ToBase64String(bytes);

そして、その文字列からバイト配列に戻るには、次のようにします。

byte[] bytes = Convert.FromBase64String(s);
于 2010-03-12T20:42:37.453 に答える
0

CryptoStringifyと呼ばれる私が作成したNugetパッケージに興味がある人は、バイト配列をいじくり回すことなく、すっきりとした構文を使用して文字列をハッシュ文字列に変換できます。

using (MD5 md5 = MD5.Create())
{
    string strHashedPassword = md5.Hash(password);
}

これはの拡張メソッドでHashAlgorithmあるKeyedHashAlgorithmため、SHA1、HMACSHA1、SHA256などでも機能します。

https://www.nuget.org/packages/cryptostringify

于 2015-05-30T00:21:39.323 に答える