我試圖從用戶在我的web應用程序上傳的圖像的字節數組中創建一個MD5字符串..這是因爲我想圖像分散在不同的文件夾中。 而我不必使用userID作爲文件夾名稱。看起來更專業。創建上傳圖像的MD5哈希
結果會是這樣的:
/images/ 'first-two-char-of-md5'/'the-complete-md5-string'.[jpg,png,bmp....]
這聽起來是一個很好的解決方案來處理圖像?
所以。 我的代碼(東西從互聯網上。):
protected void btnUpload_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
if (CheckFileType(FileUpload1.FileName))
{
const int BUFFER_SIZE = 255;
Byte[] Buffer = new Byte[BUFFER_SIZE];
Stream theStream = FileUpload1.PostedFile.InputStream;
nBytesRead = theStream.Read(Buffer, 0, BUFFER_SIZE);
System.Text.ASCIIEncoding ASCIIEncoding = new ASCIIEncoding();
System.Text.UTF8Encoding utf8 = new UTF8Encoding();
//Just trying some stuff to see the output...
Label1.Text = ASCIIEncoding.GetString(CalculateMD5(theStream)) + "<br>" + utf8.GetString(CalculateMD5(theStream)) + "<br>" + Convert.ToBase64String(CalculateMD5(theStream));
}
}
}
private static byte[] _emptyBuffer = new byte[0];
public static byte[] CalculateMD5(Stream stream)
{
return CalculateMD5(stream, 64 * 1024);
}
public static byte[] CalculateMD5(Stream stream, int bufferSize)
{
MD5 md5Hasher = MD5.Create();
byte[] buffer = new byte[bufferSize];
int readBytes;
while ((readBytes = stream.Read(buffer, 0, bufferSize)) > 0)
{
md5Hasher.TransformBlock(buffer, 0, readBytes, buffer, 0);
}
md5Hasher.TransformFinalBlock(_emptyBuffer, 0, 0);
return md5Hasher.Hash;
}
結果。我從「calculateMD5()」得到一些輸出,但是當我試圖把它放到label1。看看發生了什麼。只有一堆奇特的人物。 我在這裏做錯了什麼?我希望它是htmlsafe ... a-z,A-Z,只有0-9。
謝謝!關於具有相同圖像的2個用戶。你認爲有可能將userID添加到_emptybuffer字節[],在我的情況是空的(我認爲),添加鹽? – Easyrider 2012-01-10 11:59:46
是的,這應該工作。 MD5使用校驗和來計算最終的散列,'TransformFinalBlock'是一種說法'這裏是最後一個數據,並且完成散列操作'。或者,您可以將任何其他數據寫入到傳遞給'CalculateMD5'的流的末尾(可能會先將圖像數據讀入中間的'MemoryStream',追加額外的數據並將'MemoryStream'傳遞給'CalculateMD5' )。 – mdm 2012-01-10 13:26:03