Nhóm của tôi đã bàn giao một số mã phía máy chủ (bằng Java) tạo mã thông báo ngẫu nhiên và tôi có một câu hỏi liên quan đến điều tương tự -
Mục đích của các mã thông báo này khá nhạy cảm - được sử dụng cho id phiên, liên kết đặt lại mật khẩu, v.v. Vì vậy, chúng cần phải được mã hóa ngẫu nhiên để tránh ai đó đoán chúng hoặc vũ phu buộc chúng khả thi. Mã thông báo là "dài" vì vậy nó dài 64 bit.
Mã hiện đang sử dụng java.util.Randomlớp để tạo các mã thông báo này. Các tài liệu cho java.util.Randomrõ ràng sau đây:
Các thực thể của java.util.Random không bảo mật bằng mật mã. Thay vào đó, hãy xem xét sử dụng SecureRandom để có được trình tạo số giả ngẫu nhiên an toàn bằng mật mã để sử dụng cho các ứng dụng nhạy cảm bảo mật.
Tuy nhiên, cách mà mã hiện đang sử dụng java.util.Randomlà thế này - Nó khởi tạo java.security.SecureRandomlớp và sau đó sử dụng SecureRandom.nextLong()phương thức để lấy hạt giống được sử dụng để khởi tạo java.util.Randomlớp. Sau đó, nó sử dụng java.util.Random.nextLong()phương thức để tạo mã thông báo.
Vì vậy, câu hỏi của tôi bây giờ - Có phải vẫn không an toàn khi biết rằng nó java.util.Randomđang được gieo bằng cách sử dụng java.security.SecureRandom? Tôi có cần sửa đổi mã để nó sử dụng java.security.SecureRandomriêng để tạo mã thông báo không?
Hiện tại hạt giống mã là Randommột lần khi khởi động
Randommột lần khi khởi động không, hay nó gieo một mã mới cho mỗi mã thông báo? Hy vọng, đây là một câu hỏi ngu ngốc, nhưng tôi nghĩ tôi sẽ kiểm tra.
longhoặc có thể double.