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

Keyed-Hashing để xác thực tin nhắn trong python

Xác thực tin nhắn bằng cách sử dụng các hàm băm mật mã trong python có thể đạt được thông qua cơ chế HMAC. Chúng ta có thể sử dụng HMAC với nhiều hàm băm có thể lặp lại như MD5, SHA-1 kết hợp với khóa chia sẻ bí mật.

Ý tưởng cơ bản là bảo mật dữ liệu của chúng tôi, bằng cách tạo một băm mật mã của dữ liệu thực tế kết hợp với một khóa bí mật được chia sẻ. Kết quả cuối cùng được gửi mà không có khóa bí mật nhưng hàm băm kết quả có thể được sử dụng để kiểm tra tin nhắn đã truyền hoặc được lưu trữ.

Cú pháp

hmac.new(key, msg = None, digestmod = None)

Trả về tạo đối tượng hmac mới.

Ở đâu -

  • Key - Khóa bí mật được chia sẻ tại đây.

  • Msg - thông báo để băm ở đây thông báo để băm ở đây

  • Digestmod - tên hoặc mô-đun thông báo để đối tượng HMAC sử dụng

Các phương thức và thuộc tính của mô-đun HMAC -

  • hmac.update (tin nhắn)

    Được sử dụng để cập nhật đối tượng hmac bằng cách sử dụng thông báo đã cho. Tin nhắn sẽ được thêm vào nếu bạn gọi phương thức này nhiều lần.

  • hmac.digest ()

    Trả lại bản tóm tắt của các byte được chuyển đến phương thức update () cho đến nay.

  • hashlib.hexdigest ()

    Giống như thông báo tóm tắt () ngoại trừ thông báo tóm tắt được trả về dưới dạng một chuỗi có độ dài gấp đôi chiều dài chỉ chứa các chữ số thập lục phân. Điều này có thể được sử dụng để trao đổi giá trị một cách an toàn trong email hoặc các môi trường không phải nhị phân khác.

  • haslib.copy ()

    Trả lại bản sao (“bản sao”) của đối tượng hmac.

Ví dụ1

Tạo hàm băm, sử dụng thuật toán băm MD5 mặc định.

#Import libraries
import hashlib
import hmac
#data
update_bytes = b'Lorem ipsum dolor sit amet, consectetur adipiscing elit. \
   Suspendisse tristique condimentum viverra. Nulla accumsan \
   orci risus, non congue lacus feugiat id.'
#secret key
password = b'402xy5#'
#Generate cryptographic hash using md5
my_hmac = hmac.new(update_bytes, password, hashlib.md5)
print("The first digest: " + str(my_hmac.digest()))
print("The Canonical Name: " + my_hmac.name)
print("Block size: " + str (my_hmac.block_size) + "bytes")
print("Digest size: " + str(my_hmac.digest_size) + "bytes")
#Create a copy of the hmac object
my_hmac_cpy = my_hmac.copy()
print("The Copied digest: " + str(my_hmac_cpy.digest()))

Đầu ra

The first digest: b'H\xcc.nf\xdd\x8bC\x8di\x0cC\xb8\xe9l\xa8'
The Canonical Name: hmac-md5
Block size: 64bytes
Digest size: 16bytes
The Copied digest: b'H\xcc.nf\xdd\x8bC\x8di\x0cC\xb8\xe9l\xa8'

Vì SHA1 được coi là an toàn hơn thuật toán MD5 và nếu bạn đang nghĩ đến việc chạy chương trình trên bằng thuật toán SHA1. Chỉ cần sửa đổi tên thuật toán trong dòng này,

my_hmac =hmac.new (update_bytes, mật khẩu, hashlib.sha1)
và kết quả của chúng ta sẽ giống như sau:

Thông báo đầu tiên:b '\ xc3T \ xe7 [\ xc8 \ xa3O / $ \ xbd`A \ xad \ x07d \ xe8 \ xae \ xa2! \ Xb4'

The Canonical Name: hmac-sha1
Block size: 64bytes
Digest size: 20bytes
The Copied digest: b'\xc3T\xe7[\xc8\xa3O/$\xbd`A\xad\x07d\xe8\xae\xa2!\xb4'

Ứng dụng

Cơ chế xác thực HMAC có thể được sử dụng ở bất kỳ nơi nào mà bảo mật là quan trọng như các dịch vụ mạng công cộng. Ví dụ:trong mạng công cộng, chúng tôi đang gửi một tệp / dữ liệu quan trọng qua đường ống hoặc ổ cắm, tệp / dữ liệu đó phải được ký và sau đó chữ ký sẽ được kiểm tra trước khi dữ liệu được sử dụng.