画像ファイルの MD5 ハッシュを取得しており、そのハッシュをファイル名として使用したいと考えています。
ハッシュを有効なファイル名の文字列に変換するにはどうすればよいですか?
編集: toString()
「System.Byte[]」を与えるだけです
これはどう:
string filename = BitConverter.ToString(yourMD5ByteArray);
ハイフンのない短いファイル名を好む場合は、次を使用できます。
string filename =
BitConverter.ToString(yourMD5ByteArray).Replace("-", string.Empty);
コメンターが指摘したように、通常のベース 64 エンコーディングには「/」文字が含まれている可能性があり、これは明らかにファイル名の問題になります。ただし、アンダースコアなど、他の文字も使用できます。すべての「/」をアンダースコアに置き換えてください。
string filename = Convert.ToBase64String(md5HashBytes).Replace("/","_");
これを試して:
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]));
}
これがWindowsの場合、技術的にBase64を使用することは不適切であり、ファイル名は大文字と小文字を区別しません(少なくともエクスプローラービューでは)。ただし、base64では、「a」は「A」とは異なります。衝突の..
より良い代替手段は、ビットコンバータークラスのような16進数です。または、base32エンコーディングを使用できる場合(base64とbase32の両方からパディングを削除した後、128ビットの場合は同様の長さのファイル名が得られます)。