字串產生Hash值後轉換成Guid的若干方法和一個重要問題

來源:互聯網
上載者:User

字串計算成Hash值的代碼如下:

MD5 md5 = MD5.Create();byte[] data = System.Text.Encoding.Default.GetBytes(str);byte[] md5data = md5.ComputeHash(data);
 
計算出Hash值後,結果是一堆byte, 不方便多個hash值進行比較.
由於Hash值計算出來是一個128位的值, 轉換成字串表達形式就好對比多了,也就是MD5碼的字串形式, 另外由於Guid也是128位的,所以可以用guid來儲存這個MD5碼.
 
先說一種不正規的MD5產生方法: 
return new Guid(md5data);
請注意: 這種方式產生的Guid和下面幾種方式產生的guid的結果是不一樣的,並不是說就是錯誤的, 使用的時候需要注意.  
 
產生Guid有幾種方法(這幾種方式產生的guid是正確的):
一:
for (int i = 0; i < md5data.Length; ++i){      str += md5data[i].ToString("x").PadLeft(2, '0');}return new Guid(str);

 

二:

int first4 = byteToInt32(md5data, 0);short next2 = byteToInt16(md5data, 4);short next3 = byteToInt16(md5data, 6);return new Guid(first4, next2, next3, ne);
 
為什麼new Guid(md5data)這種方法是錯誤的呢.
因為這種方法調用底層Win32的方法轉換字元與byte,而.net與C在位元組的高位順序上是相反的, 所以會出現前16位不一致的情況.導致計算出來的MD5碼不正確.
 
後兩種方法的思路是先計算出來MD5碼,然後產生Guid,這樣md5碼就不會受到高地位的影響. 
但是要注意一個問題: 後兩種方法產生的guid, 調用ToByteArray產生的位元組數值和md5data是不一樣的. 
所以我們要注意的是, 我們是使用Guid來儲存Md5碼,所以要先計算MD5(MD5碼的演算法是固定的).
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.