Hướng dẫn python get secret - trăn nhận được bí mật

Mới trong phiên bản 3.6.

Mã nguồn: lib/secret.py Lib/secrets.py


Mô -đun secrets được sử dụng để tạo các số ngẫu nhiên mạnh về mặt mật mã phù hợp để quản lý dữ liệu như mật khẩu, xác thực tài khoản, mã thông báo bảo mật và bí mật liên quan.

Cụ thể, secrets nên được sử dụng theo sở thích của trình tạo số giả ngẫu nhiên mặc định trong mô-đun random, được thiết kế để mô hình hóa và mô phỏng, không bảo mật hoặc mật mã.

Số ngẫu nhiên¶

Mô -đun secrets cung cấp quyền truy cập vào nguồn ngẫu nhiên an toàn nhất mà hệ điều hành của bạn cung cấp.

ClassSecrets.SystemRandom¶ secrets.SystemRandom

Một lớp để tạo các số ngẫu nhiên bằng cách sử dụng các nguồn chất lượng cao nhất được cung cấp bởi hệ điều hành. Xem

>>> token_hex(16)  
'f9bf78b9a18ce6d46a0cd2b0b86df9da'
1 để biết thêm chi tiết.

Bí mật.Choice (trình tự) ¶choice(sequence)

Trả về một phần tử được chọn ngẫu nhiên từ một chuỗi không trống.

bí mật.randbelow (n) ¶randbelow(n)

Trả về một int ngẫu nhiên trong phạm vi [0, n).

bí mật.randbits (k) ¶randbits(k)

Trả về một int với k bit ngẫu nhiên.

Tạo mã thông báo

Mô-đun secrets cung cấp các chức năng để tạo mã thông báo bảo mật, phù hợp cho các ứng dụng như đặt lại mật khẩu, URL khó đoán và tương tự.

Bí mật.Token_Bytes ([nbytes = none]) ¶token_bytes([nbytes=None])

Trả về một chuỗi byte ngẫu nhiên chứa số byte nbyte. Nếu NBYTE là

>>> token_hex(16)  
'f9bf78b9a18ce6d46a0cd2b0b86df9da'
3 hoặc không được cung cấp, một mặc định hợp lý được sử dụng.

>>> token_bytes(16)  
b'\xebr\x17D*t\xae\xd4\xe3S\xb6\xe2\xebP1\x8b'

bí mật.token_hex ([nbytes = none]) ¶token_hex([nbytes=None])

Trả về một chuỗi văn bản ngẫu nhiên, trong thập lục phân. Chuỗi có nbytes byte ngẫu nhiên, mỗi byte được chuyển đổi thành hai chữ số hex. Nếu NBYTE là

>>> token_hex(16)  
'f9bf78b9a18ce6d46a0cd2b0b86df9da'
3 hoặc không được cung cấp, một mặc định hợp lý được sử dụng.

>>> token_hex(16)  
'f9bf78b9a18ce6d46a0cd2b0b86df9da'

Secrets.token_urlsafe ([nbytes = none]) ¶token_urlsafe([nbytes=None])

Trả về một chuỗi văn bản an toàn URL ngẫu nhiên, chứa các byte ngẫu nhiên NBytes. Văn bản được mã hóa base64, vì vậy trung bình mỗi byte dẫn đến khoảng 1,3 ký tự. Nếu NBYTE là

>>> token_hex(16)  
'f9bf78b9a18ce6d46a0cd2b0b86df9da'
3 hoặc không được cung cấp, một mặc định hợp lý được sử dụng.

>>> token_urlsafe(16)  
'Drmhze6EPcv0fN_81Bj-nA'

Mã thông báo nên sử dụng bao nhiêu byte? ¶

Để được an toàn trước các cuộc tấn công vũ phu, mã thông báo cần phải có đủ ngẫu nhiên. Thật không may, những gì được coi là đủ sẽ nhất thiết phải tăng lên khi máy tính trở nên mạnh mẽ hơn và có thể đoán được nhiều hơn trong một thời gian ngắn hơn. Kể từ năm 2015, người ta tin rằng 32 byte (256 bit) tính ngẫu nhiên là đủ cho trường hợp sử dụng điển hình dự kiến ​​cho mô-đun secrets.

Đối với những người muốn quản lý độ dài mã thông báo của riêng họ, bạn có thể chỉ định rõ ràng mức độ ngẫu nhiên được sử dụng cho mã thông báo bằng cách đưa ra một đối số

>>> token_hex(16)  
'f9bf78b9a18ce6d46a0cd2b0b86df9da'
7 cho các chức năng
>>> token_hex(16)  
'f9bf78b9a18ce6d46a0cd2b0b86df9da'
8 khác nhau. Đối số đó được coi là số byte của tính ngẫu nhiên để sử dụng.

Mặt khác, nếu không có đối số nào được cung cấp hoặc nếu đối số là

>>> token_hex(16)  
'f9bf78b9a18ce6d46a0cd2b0b86df9da'
3, các hàm
>>> token_hex(16)  
'f9bf78b9a18ce6d46a0cd2b0b86df9da'
8 sẽ sử dụng một mặc định hợp lý thay thế.

Ghi chú

Mặc định đó có thể thay đổi bất cứ lúc nào, bao gồm cả trong các bản phát hành bảo trì.

Cac chưc năng khac¶

Secrets.compare_digest (a, b) ¶compare_digest(a, b)

Trả về

>>> token_urlsafe(16)  
'Drmhze6EPcv0fN_81Bj-nA'
1 Nếu chuỗi A và B bằng nhau, nếu không
>>> token_urlsafe(16)  
'Drmhze6EPcv0fN_81Bj-nA'
2, sử dụng một thời gian không đổi của người dùng so sánh với nhau để giảm nguy cơ tấn công thời gian. Xem
>>> token_urlsafe(16)  
'Drmhze6EPcv0fN_81Bj-nA'
3 để biết thêm chi tiết.

Công thức nấu ăn và thực hành tốt nhất Jo

Phần này cho thấy các công thức nấu ăn và thực tiễn tốt nhất để sử dụng secrets để quản lý mức độ bảo mật cơ bản.

Tạo mật khẩu chữ và số tám ký tự:

import string
import secrets
alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(8))

Ghi chú

Mặc định đó có thể thay đổi bất cứ lúc nào, bao gồm cả trong các bản phát hành bảo trì.

Cac chưc năng khac¶

import string
import secrets
alphabet = string.ascii_letters + string.digits
while True:
    password = ''.join(secrets.choice(alphabet) for i in range(10))
    if (any(c.islower() for c in password)
            and any(c.isupper() for c in password)
            and sum(c.isdigit() for c in password) >= 3):
        break

Secrets.compare_digest (a, b) ¶

import secrets
# On standard Linux systems, use a convenient dictionary file.
# Other platforms may need to provide their own word-list.
with open('/usr/share/dict/words') as f:
    words = [word.strip() for word in f]
    password = ' '.join(secrets.choice(words) for i in range(4))

Trả về

>>> token_urlsafe(16)  
'Drmhze6EPcv0fN_81Bj-nA'
1 Nếu chuỗi A và B bằng nhau, nếu không
>>> token_urlsafe(16)  
'Drmhze6EPcv0fN_81Bj-nA'
2, sử dụng một thời gian không đổi của người dùng so sánh với nhau để giảm nguy cơ tấn công thời gian. Xem
>>> token_urlsafe(16)  
'Drmhze6EPcv0fN_81Bj-nA'
3 để biết thêm chi tiết.

import secrets
url = 'https://example.com/reset=' + secrets.token_urlsafe()