Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Mô-đun Python tạo số ngẫu nhiên an toàn (secrets)


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