Trong bài này, chúng ta sẽ thấy cách tạo số ngẫu nhiên an toàn (secure random numbers) có thể dùng hiệu quả làm mật khẩu. Ngoài số ngẫu nhiên, ta cũng có thể thêm chữ cái và ký tự khác để tăng độ an toàn.
Với secrets
Mô-đun secrets có hàm choice dùng để tạo mật khẩu độ dài yêu cầu bằng vòng lặp for và hàm range.
Ví dụ
import secrets
import string
allowed_chars = string.ascii_letters + string.digits + string.printable
pswd = ''.join(secrets.choice(allowed_chars) for i in range(8))
print("Mật khẩu được tạo: \n", pswd) Kết quả
Chạy mã trên cho kết quả sau:
Mật khẩu được tạo: $pB7WY
Với điều kiện tối thiểu (at least condition)
Ta có thể ép buộc điều kiện như chữ thường, chữ hoa và chữ số phải có trong mật khẩu. Lại dùng mô-đun secrets.
Ví dụ
import secrets
import string
allowed_chars = string.ascii_letters + string.digits + string.printable
while True:
pswd = ''.join(secrets.choice(allowed_chars) for i in range(8))
if (any(c.islower() for c in pswd) and
any(c.isupper() for c in pswd) and
sum(c.isdigit() for c in pswd) >= 3):
print("Mật khẩu được tạo: \n", pswd)
break Kết quả
Chạy mã trên cho kết quả sau:
Mật khẩu được tạo: p7$7nS2w
Token ngẫu nhiên (Random tokens)
Khi xử lý URL, nếu muốn token ngẫu nhiên làm phần của URL, ta dùng các phương thức dưới đây từ mô-đun secrets.
Ví dụ
import secrets
# Chuỗi byte ngẫu nhiên
tkn1 = secrets.token_bytes(8)
# Chuỗi văn bản ngẫu nhiên dạng hexadecimal
tkn2 = secrets.token_hex(8)
# Chuỗi văn bản an toàn cho URL
url = 'https://thename.com/reset=' + secrets.token_urlsafe()
print("Chuỗi byte ngẫu nhiên:\n", tkn1)
print("Chuỗi văn bản ngẫu nhiên hexadecimal: \n", tkn2)
print("Chuỗi văn bản với token url-safe: \n", url) Kết quả
Chạy mã trên cho kết quả sau:
Chuỗi byte ngẫu nhiên: b'\x0b-\xb2\x13\xb0Z#\x81' Chuỗi văn bản ngẫu nhiên hexadecimal: d94da5763fce71a3 Chuỗi văn bản với token url-safe: https://thename.com/reset=Rd8eVookY54Q7aTipZfdmz-HS62rHmRjSAXumZdNITo