Như được chỉ ra bởi Justin, một hướng dẫn nên là duy nhất mỗi lần, trong khi một băm sẽ cung cấp cho một kết quả nhất quán mỗi lần cho cùng một giá trị.
Bây giờ tôi muốn thêm vào đó và nói rằng cả hai hướng dẫn và băm (hầu hết, nếu không phải tất cả thuật toán) đều bị va chạm, mặc dù cảm giác ruột của tôi là băm phải chịu mức va chạm lớn hơn Guids ... mặc dù điều này có thể tùy thuộc vào kích thước của băm (ví dụ: 128 bit, 256 bit, 512 bit, v.v ...).
Một vấn đề khác bạn sẽ gặp phải là byte[]
từ giá trị băm SHA1 dài 20 byte, trong khi Guid dài 16 byte, do đó, việc tạo một Guid từ băm SHA1 sẽ không chính xác.
Ví dụ:
string myString = "Hello World";
SHA1 sha1 = SHA1CryptoServiceProvider.Create();
Byte[] myStringBytes = ASCIIEncoding.Default.GetBytes(myString);
Byte[] hash = sha1.ComputeHash(myStringBytes);
Console.WriteLine(new Guid(hash.Take(16).ToArray()));
Ví dụ trên sẽ tạo ra một Guid từ băm của bạn, mặc dù nó sử dụng LINQ để có được 16 byte từ mảng băm (do đó thiếu chính xác ... 4 byte cuối cùng là chỉ cần bỏ qua)
MD5 là một băm 16 byte, do đó, điều này có vẻ như nó có thể phù hợp hơn để chuyển đổi thành Guid hơn SHA1.
Ví dụ:
string myString = "Hello World";
MD5 md5 = MD5.Create();
Byte[] myStringBytes = ASCIIEncoding.Default.GetBytes(myString);
Byte[] hash = md5.ComputeHash(myStringBytes);
Console.WriteLine(new Guid(hash));
Điều này tạo ra một Guid chính xác từ băm MD5, mặc dù tôi sẽ nêu, tất cả điều này là, là một đại diện Guid của băm MD5 ... không nên có thực tế thay đổi trong dữ liệu byte[]
.
Đây là kinda khó hiểu như một băm và một guid những điều khác nhau. Một guid sẽ cung cấp cho bạn một chuỗi duy nhất/khác nhau mỗi khi bạn yêu cầu một guid mới. Hashes cho bạn kết quả nhất quán dựa trên cùng một đầu vào. – Justin
Nó sẽ là một GUID xác định và lặp lại, dựa trên một băm, có ý định tạo ra các giá trị duy nhất tùy thuộc vào đầu vào. Thông tin thêm: http://waterjuice.org/2013/06/type-3-and-5-guids/ –
@Justin: Bạn hiểu lầm những gì OP yêu cầu. GUID không là gì ngoài một định danh duy nhất toàn cầu; đó là điều GUID đại diện. Có nhiều cách để tạo GUID. Ví dụ, bạn có thể tạo GUID dựa trên thời gian và vị trí hiện tại; đó là duy nhất toàn cầu. (Chủ yếu.) Đó là loại GUID. Bạn có thể tạo GUID độc đáo về mặt thống kê với trình tạo số ngẫu nhiên; đó là một loại bốn GUID. Một băm mã hóa mạnh mẽ ** của một chuỗi duy nhất ** cũng là một nguồn duy nhất, và có thể được sử dụng để xây dựng một GUID. –