変換のmd5ハッシュバイト配列を文字列
-
19-09-2019 - |
質問
かの変換のハッシュされた結果であるバイト配列、文字列?
byte[] bytePassword = Encoding.UTF8.GetBytes(password);
using (MD5 md5 = MD5.Create())
{
byte[] byteHashedPassword = md5.ComputeHash(bytePassword);
}
I変換する必要がある 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いくつかの奇妙な理由のため、交換するので、ちょうどそれらを削除します。
アップデート: あなたは「小文字」の六角を好む場合は、単に.ToLower()とブームの操作を行います。
あなたがタイトループと多くのOPSとしてこれをやっている場合は、少なくとも2つの暗黙の文字列がキャストと起こってリサイズするがあるので、これは高価になる可能性がありますのでご注意ください。
あなたは簡単に文字列にバイト配列を変換するConvert.ToBase64String
とConvert.FromBase64String
を使用することができます。
あなたはこれを行うことができます。これは、基本的にはフィリップLeybaertによって答えの最小バージョンです。
string.Concat(hash.Select(x => x.ToString("X2")))
B1DB2CC0BAEE67EA47CFAEDBF2D747DF
まあ、それは通常の文字列に示されていることができない可能性が値を持っているので、最善の策は、Base64でエンコードされた文字列に変換することです。
string s = Convert.ToBase64String(bytes);
と使用
byte[] bytes = Convert.FromBase64(s);
バイトを取り戻すために。
さて、あなたはバイトを取る文字列コンストラクタとエンコーディングを使用することができますが、それは楽しい文字をたくさん(ヌルバイト、改行、制御文字などが含まれている可能性があるので、あなたはおそらくその外の文字列を管理することは困難で取得します)
これを行うための最善の方法はで動作するように簡単です素敵な文字列を取得するためにベース64でそれをコード化することです
string s = Convert.ToBase64String(bytes);
とバックバイト配列にその文字列から行くます:
byte[] bytes = Convert.FromBase64String(s);
をお持ちの方は、Nugetパッケージで作成したという CryptoStringify でに変換する文字列ハッシュ化された文字列をカスタマーサポートの書式なしが選べるバイト配列:
using (MD5 md5 = MD5.Create())
{
string strHashedPassword = md5.Hash(password);
}
この拡張方法 HashAlgorithm
や KeyedHashAlgorithm
う作品SHA1HMACSHA1,SHA256などです。