バイト配列であるハッシュ結果を文字列に変換するにはどうすればよいですか?
byte[] bytePassword = Encoding.UTF8.GetBytes(password);
using (MD5 md5 = MD5.Create())
{
byte[] byteHashedPassword = md5.ComputeHash(bytePassword);
}
文字列に変換する必要がありbyteHashedPassword
ます。
バイト配列であるハッシュ結果を文字列に変換するにはどうすればよいですか?
byte[] bytePassword = Encoding.UTF8.GetBytes(password);
using (MD5 md5 = MD5.Create())
{
byte[] byteHashedPassword = md5.ComputeHash(bytePassword);
}
文字列に変換する必要がありbyteHashedPassword
ます。
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);
私はいつもこれが最も便利だと思っていました:
string hashPassword = BitConverter.ToString(byteHashedPassword).Replace("-","");
いくつかの奇妙な理由で、BitConverterはバイトの間にダッシュを入れるのが好きなので、置換はそれらを削除するだけです。
更新:「小文字」の16進数が必要な場合は、.ToLower()とブームを実行してください。
これをタイトなループとして実行し、多くの操作を行う場合、少なくとも2つの暗黙的な文字列のキャストとサイズ変更が行われるため、これはコストがかかる可能性があることに注意してください。
とを使用Convert.ToBase64String
しConvert.FromBase64String
て、バイト配列を文字列に簡単に変換できます。
「Hexpreference」キャンプにいる場合は、これを行うことができます。これは基本的にPhilippeLeybaertによる回答の最小バージョンです。
string.Concat(hash.Select(x => x.ToString("X2")))
B1DB2CC0BAEE67EA47CFAEDBF2D747DF
ハッシュであるだけでなく、通常の文字列では表示できない値が含まれている可能性があるため、Base64でエンコードされた文字列に変換することをお勧めします。
string s = Convert.ToBase64String(bytes);
と使用
byte[] bytes = Convert.FromBase64(s);
バイトを取り戻すため。
ええと、バイトとエンコーディングをとる文字列コンストラクターを使用することもできますが、文字列には楽しい文字(nullバイト、改行、制御文字など)がたくさん含まれている可能性があるため、文字列の管理が難しくなる可能性があります。
これを行うための最良の方法は、base 64でエンコードして、操作しやすい素敵な文字列を取得することです。
string s = Convert.ToBase64String(bytes);
そして、その文字列からバイト配列に戻るには、次のようにします。
byte[] bytes = Convert.FromBase64String(s);
CryptoStringifyと呼ばれる私が作成したNugetパッケージに興味がある人は、バイト配列をいじくり回すことなく、すっきりとした構文を使用して文字列をハッシュ文字列に変換できます。
using (MD5 md5 = MD5.Create())
{
string strHashedPassword = md5.Hash(password);
}
これはの拡張メソッドでHashAlgorithm
あるKeyedHashAlgorithm
ため、SHA1、HMACSHA1、SHA256などでも機能します。