2009-11-03 66 views

Trả lời

85
using System.Security.Cryptography; 
... 
using(RandomNumberGenerator rng = new RNGCryptoServiceProvider()) 
{ 
    byte[] tokenData = new byte[32]; 
    rng.GetBytes(tokenData); 

    string token = Convert.ToBase64String(tokenData); 
} 
+28

Mật mã của trình tạo WinAPI GUID cho thấy rằng, do chuỗi các GUIDs V4 là giả ngẫu nhiên, nên trạng thái ban đầu có thể dự đoán tới 250 000 GUID được trả về bởi hàm UuidCreate. Đây là lý do tại sao GUID không nên được sử dụng trong mật mã, ví dụ như các khóa ngẫu nhiên. (từ http://en.wikipedia.org/wiki/Globally_Unique_Identifier) ​​ – configurator

+1

Đây không phải là mật mã cụ thể, tho. Và, rất khó để dự đoán trạng thái ban đầu của máy. –

+10

Một cuộc tấn công phổ biến là DDoS một máy chủ cho đến khi nó được khởi động lại. Sau đó, dự đoán trạng thái ban đầu (đồng hồ hệ thống) dễ dàng hơn nhiều. – LaJmOn

3

Điều đó phụ thuộc vào những gì bạn có nghĩa là bằng cách nhanh chóng ...

Không có thực sự nhanh chóng đảm bảo máy phát ngẫu nhiên. Nếu bạn muốn nhanh chóng, bạn nên sử dụng các lớp ngẫu nhiên thường xuyên. Nếu bạn muốn bảo mật, bạn nên sử dụng trình tạo ngẫu nhiên trong không gian tên Mật mã, nhưng điều đó chậm hơn đáng kể. Bạn chỉ đơn giản là không thể có cả hai.

+1

Nếu bạn sẵn sàng thực hiện tương tác với việc triển khai mã hóa gốc, bạn có thể có cả hiệu năng xuất sắc (nhanh hơn vài lần so với 'System.Random') và bảo mật. – CodesInChaos

+9

@CodesInChaos: Vì vậy; nhanh chóng, an toàn, đơn giản - chọn bất kỳ hai. :) – Guffa

Các vấn đề liên quan