假設我使用這個代碼來生成散列:使用此散列創建策略是否可能發生SHA-512衝突?
static void Main(string[] args) {
string id = Guid.Parse("8681941A-76C2-4120-BC34-F800B5AAB5A5".ToLower()).ToString();
string date = DateTime.Today.ToString("yyyy-MM-dd");
Console.WriteLine(id);
Console.WriteLine(date);
using (System.Security.Cryptography.SHA512Managed hashTool =
new System.Security.Cryptography.SHA512Managed()) {
Byte[] PasswordAsByte = System.Text.Encoding.UTF8.GetBytes(string.Concat(id, date));
Byte[] EncryptedBytes = hashTool.ComputeHash(PasswordAsByte);
hashTool.Clear();
Console.WriteLine(Convert.ToBase64String(EncryptedBytes));
}
Console.ReadLine();
}
在現實世界的例子,當你對樣品看,我會生成一個GUID和日期哈希值。我將從數據庫中獲取這些值。
用這種方法是否有可能使用不同的值得到相同的哈希結果?
編輯:
正如我指出,我會拉值形式的數據庫。正如你所猜測的,Guid是唯一的id關鍵字(如果我沒有遇到奇蹟,sql server會多次爲我生成相同的Guid)。日期時間值將是記錄的付款到期日。我在這裏演示了DateTime.Today
,但我不會在產品上使用它。
每個散列算法都可能遲早會發生碰撞,但在大多數情況下,「later」很長,所以你不應該關心它。 – zerkms 2012-02-20 20:54:50
@zerkms謝謝!假設這是一個電子商務應用程序,我應該繼續不關心嗎? – tugberk 2012-02-20 20:56:48
**投票重新開放。**這個問題有幾個屬性,使其與其他「可哈希函數相撞?」有趣和不同。問題,因爲我們在這裏也討論了hash的_inputs_。 – 2012-02-20 21:03:32