我正在使用圖像文件的MD5哈希,並且希望將哈希用作文件名。如何將MD5哈希轉換爲字符串並將其用作文件名
如何將散列轉換爲有效文件名的字符串?
編輯:toString()
只是給出 「System.Byte []」
我正在使用圖像文件的MD5哈希,並且希望將哈希用作文件名。如何將MD5哈希轉換爲字符串並將其用作文件名
如何將散列轉換爲有效文件名的字符串?
編輯:toString()
只是給出 「System.Byte []」
作爲評論者指出的 - 正常基64編碼可以包含一個 '/' 字符,這obivously將是一個問題與文件名。但是,還有其他可用的字符,例如下劃線 - 只需用下劃線替換所有的'/'即可。
string filename = Convert.ToBase64String(md5HashBytes).Replace("/","_");
如何:
string filename = BitConverter.ToString(yourMD5ByteArray);
如果你喜歡不帶連字符短文件名,那麼你可以只使用:使用
string filename =
BitConverter.ToString(yourMD5ByteArray).Replace("-", string.Empty);
技術上Base64是壞的,如果這是Windows的文件名是不區分大小寫的(至少在探索者看來)..但在base64中,'a'與'A'不同,這意味着可能不太可能,但最終碰撞速度會更高。
一個更好的選擇是像bitconverter類的十六進制,或者如果你可以使用base32編碼(從base64和base32中刪除填充,在128位的情況下,會給你類似的長度文件名)。
試試這個:
Guid guid = new Guid(md5HashBytes);
string hashString = guid.ToString("N");
// format: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
string hashString = guid.ToString("D");
// format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
string hashString = guid.ToString("B");
// format: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
string hashString = guid.ToString("P");
// format: (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
這可能是最安全的文件名。你總是得到一個十六進制字符串,從不擔心/或+等
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(inputString));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
string hashed = sBuilder.ToString();
試試這個:
string Hash = Convert.ToBase64String(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes("sample")));
//input "sample" returns = Xo/5v1W6NQgZnSLphBKb5g==
或
string Hash = BitConverter.ToString(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes("sample")));
//input "sample" returns = 5E-8F-F9-BF-55-BA-35-08-19-9D-22-E9-84-12-9B-E6
嘗試的MD5哈希Base32。它提供文件名安全的不區分大小寫的字符串。
string Base32Hash(string input)
{
byte[] buf = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(input));
return String.Join("", buf.Select(b => "abcdefghijklmonpqrstuvwxyz234567"[b & 0x1F]));
}
你想要得到的哈希值作爲十六進制不是二進制......我不這樣做C#雖然,所以我不知道該怎麼 – Greg 2009-04-17 12:11:44
正如擡起頭,你可能想使用SHAx因爲MD5是被逐步淘汰。 – 2009-04-17 12:32:28
停止使用MD5的唯一原因是最近發生密碼攻擊(與SHA-0/1相同)。如果你不是出於加密原因使用它,那麼不需要急於轉換。 – 2009-04-17 12:45:25