2010-09-09 29 views
7

Tôi đang tạo mã xác minh được sử dụng để kích hoạt tài khoản. Bạn đã có thể thấy điều này trước đây.Chuỗi ngẫu nhiên là mã xác minh tốt

Câu hỏi của tôi: nếu tôi là để tạo ra mã này với một công thức phức tạp như thế này:

md5(md5(time().'helloguys'.rand(0,9999))); 

Là nó thực sự tốt hơn so với bất kỳ tạo ra chỉ là một chuỗi ngẫu nhiên của 32 ký tự và con số như gj3dI3OGwo5Enf...?

+0

Bạn có thể muốn xem xét base32 mã hóa kết quả của bạn để nó dễ dàng hơn cho người dùng của bạn để phân biệt giữa nhân vật trông giống như trong một số phông chữ. –

+0

Ngoài việc tạo ra giá trị ngẫu nhiên (ví dụ: số xác minh), nếu 2 người dùng đăng ký và tạo chính xác mã xác minh tương tự, bạn có thể muốn xử lý trường hợp đó. Nếu tính duy nhất quan trọng, tôi nghĩ ngay cả mt_rand() cũng không đủ. –

+0

Tôi nghĩ mã xác minh sẽ được lưu trữ trong cơ sở dữ liệu - đặt khóa duy nhất trên cột và trước khi chèn mã xác minh, hãy kiểm tra xem mã đã tồn tại trong cơ sở dữ liệu hay chưa. chưa được sử dụng trước đây. –

Trả lời

6

Không, việc sử dụng hàm băm không tốt hơn. Nó sẽ an toàn hơn (ít dự đoán hơn) để chọn 32 ký tự ngẫu nhiên. (Chữ số là ký tự.) Sử dụng trình tạo số ngẫu nhiên ("mật mã") tốt, với một hạt giống tốt (một số byte từ/dev/ngẫu nhiên). Đừng dùng thời gian làm hạt mầm.

+2

Tôi đã lên kế hoạch tạo 32 ký tự ngẫu nhiên với vòng lặp for. Có gì sai với phương pháp này? Và nó sẽ không được tốt cho một trang web bình thường cho mục đích xác minh tài khoản. (Tôi có nghĩa là ngay cả khi tôi đã twitter hoặc một cái gì đó, sẽ không được vẫn còn tốt cho mục đích ở bàn tay) – dave

+0

+1 hoàn toàn đồng ý. – rook

+0

Vâng, tôi nghĩ việc chọn từng chữ cái trong một vòng lặp 'for' sẽ ổn, miễn là RNG là tốt, nó sẽ không thành vấn đề. Điều này sẽ tốt cho bất kỳ trang web nào (có thể muốn thêm một vài ký tự). – erickson

1

Đồng ý với Erickson, chỉ có thể khuyên bạn nên sử dụng

pwgen -1 -s 

lệnh trên * nix mà sẽ công việc muich tốt hơn bất kỳ thủ tục bạn có thể phát minh ra.

Nếu bạn muốn tạo một số chuỗi lập trình bạn có thể có một cái nhìn tại

<?php  
$better_token = md5(uniqid(rand(),1)); 
?> 

này cho phép mức độ rất tốt của tính ngẫu nhiên và trước khi va chạm.

Nếu bạn cần mức thậm chí bảo mật cao hơn bạn có thể cân nhắc để tạo chuỗi ngẫu nhiên trên http://www.random.org/

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