Tôi đang xây dựng một dịch vụ web yêu cầu tôi tạo phiên tùy chỉnh và mật khẩu ngẫu nhiên, v.v.RNGCryptoServiceProvider tĩnh - Có an toàn và an toàn cho việc tạo phiên và mật khẩu ngẫu nhiên không?
Tôi đã tự hỏi nếu tạo một lớp tĩnh và sử dụng một phiên bản RNGCryptoServiceProvider tĩnh cho toàn bộ trang web là một ý tưởng hay? 1. Chủ đề có an toàn từ nhiều trường hợp yêu cầu http không? 2. Có an toàn không? Nếu tôi cho phép một người nào đó tạo nhiều phiên trong một khoảng thời gian ngắn, liệu có thể tìm ra trạng thái của RNG và dự đoán các phiên tiếp theo không?
trong dịch vụ của tôi mà người dùng khác biết khi ai đó đăng nhập và ban đầu tôi đã tạo RNGCryptoServiceProvider mới khi họ đăng nhập để tạo phiên, nhưng mối quan tâm của tôi là nếu dựa trên thời gian hiện tại, không thể có ai đó về mặt lý thuyết đi qua vài nghìn phiên để "đoán" phiên của người dùng khác nếu họ biết khoảng giây họ đăng nhập?
public static class random
{
private static RandomNumberGenerator _rng;
protected static RandomNumberGenerator rng
{
get
{
if (_rng == null) _rng = new RNGCryptoServiceProvider();
return _rng;
}
}
public static byte[] Bytes(int number)
{
var value = new byte[number];
rng.GetBytes(value);
return value;
}
public static byte Byte { get { return Bytes(1)[0]; } }
public static int Int { get { return BitConverter.ToInt32(Bytes(4), 0); } }
public static long Long { get { return BitConverter.ToInt64(Bytes(8), 0); } }
}
+1 để biết chi tiết quan trọng. –
Lớp 'RNGCryptoServiceProvider' là luồng an toàn kể từ .NET 3.5: xem https://msdn.microsoft.com/en-us/library/5f45t420%28v=vs.90%29.aspx (nhưng không phải trong Silverlight). –