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.Random
lớp để tạo các mã thông báo này. Các tài liệu cho java.util.Random
rõ 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.Random
là thế này - Nó khởi tạo java.security.SecureRandom
lớ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.Random
lớ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.SecureRandom
riêng để tạo mã thông báo không?
Hiện tại hạt giống mã là Random
một lần khi khởi động
Random
mộ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.
long
hoặc có thể double
.