Computer >> Máy Tính >  >> Lập trình >> Python

Các hàm băm và thông báo an toàn bằng Python (hashlib)


Tiêu chuẩn xử lý thông tin liên bang (FIPS) xác định các thuật toán băm an toàn SHA1, SHA224, SHA256, SHA384 và SHA512. RSA Từ viết tắt được tạo bằng chữ cái đầu của họ của Rivest, Shamir và Adleman, xác định thuật toán MD5. Các thuật toán cũ hơn được gọi là phân tích thông điệp. Thuật ngữ hiện đại là băm an toàn.

Mô-đun hashlib được sử dụng để triển khai các thuật toán sau.

  • md5
  • sha1
  • sha224
  • sha256
  • sha384
  • sha512

hashlib.new (name [, data])

Là một hàm tạo chung lấy tên chuỗi của thuật toán mong muốn làm tham số đầu tiên của nó. Nó cũng tồn tại để cho phép truy cập vào các hàm băm được liệt kê ở trên cũng như bất kỳ thuật toán nào khác mà thư viện OpenSSL của bạn có thể cung cấp. Các hàm tạo được đặt tên nhanh hơn nhiều so với new () và nên được ưu tiên hơn.

>>> hash = hashlib.new('md5',b'hello')
>>> hash.hexdigest()
'5d41402abc4b2a76b9719d911017c592'
>>> import hashlib

Sử dụng các hàm tạo được đặt tên riêng lẻ

>>> msg = hashlib.sha256()
>>> msg.update(b'Simple is better than complex')
>>> msg.digest()
b'\xabz\xd8C(n\xb3\x8b\xf6\x0c\x0e\xf2\x81z\xd7\xf93\x835\xb2\xa1\x9cM\xb1S\x1f\xf7\xf9\x1av-F'
>>> msg.block_size
64
>>> msg.hexdigest()
'ab7ad843286eb38bf60c0ef2817ad7f9338335b2a19c4db1531ff7f91a762d46'
>>> msg = hashlib.md5()
>>> msg.update(b'Simple is better than complex')
>>> msg.hexdigest()
'fd34bb8fafd17f1a21d7bb6e38c8dc68'

Một đối tượng băm có các phương thức sau -

update ()
Cập nhật đối tượng băm với đối tượng giống byte. m.update (a); m.update (b) tương đương với m.update (a + b).
thông báo ()
Trả về bản tóm tắt dữ liệu được truyền cho phương thức update () cho đến nay.
hexdigest ()
Một thông báo được trả về dưới dạng một đối tượng chuỗi có độ dài gấp đôi, chỉ chứa các chữ số thập lục phân.
copy ()
Trả về một bản sao của đối tượng băm. Điều này có thể được sử dụng để tính toán các tiêu chuẩn của dữ liệu chia sẻ một chuỗi con ban đầu chung.

Hashlib cung cấp các thuộc tính sau -

aries_guaranteed
Một tập hợp chứa tên của các thuật toán băm được đảm bảo sẽ được hỗ trợ bởi mô-đun này trên tất cả các nền tảng.
terms_available
Một tập hợp chứa tên của các thuật toán băm có sẵn trong trình thông dịch Python đang chạy.
dig_size
Kích thước của hàm băm kết quả tính bằng byte.
block_size
Kích thước khối bên trong của thuật toán băm tính bằng byte.
tên
Tên chính tắc của hàm băm này, luôn là chữ thường và luôn thích hợp làm tham số cho new () để tạo một hàm băm khác thuộc loại này.

Các thuật toán lắc_128 () và lắc_256 () cung cấp các thông báo về độ dài thay đổi với length_in_bits // 2 lên đến 128 hoặc 256 bit bảo mật.

BLAKE2 là một hàm băm mật mã được định nghĩa trong RFC 7693 có hai loại -

  • BLAKE2b, được tối ưu hóa cho nền tảng 64 bit và tạo ra các thông báo có kích thước bất kỳ từ 1 đến 64 byte,
  • BLAKE2s, được tối ưu hóa cho các nền tảng 8 đến 32 bit và tạo ra các thông báo có kích thước bất kỳ từ 1 đến 32 byte.