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

Mã hóa băm MD5 bằng Python?

Một trong những mối quan tâm lớn của tất cả các công ty CNTT trong việc bảo mật dữ liệu. Nhiều kỹ thuật băm có sẵn để chiếu và kiểm tra dữ liệu của chúng tôi.

Hash là gì

Hash là một hàm lấy chuỗi byte có độ dài thay đổi làm đầu vào và chuyển nó thành chuỗi có độ dài cố định. Tuy nhiên, để lấy lại dữ liệu gốc (byte đầu vào) của bạn không phải là điều dễ dàng. Ví dụ:x là đầu vào của bạn và f là f là hàm băm, thì việc tính f (x) rất nhanh chóng và dễ dàng nhưng cố gắng lấy lại x là một công việc rất tốn thời gian.

Giá trị trả về từ một hàm băm được gọi là hàm băm, tổng kiểm tra, giá trị băm hoặc thông báo tóm tắt.

Chúng tôi có thể tóm tắt ở trên như sau -

Mã hóa băm MD5 bằng Python?

Giả sử bạn muốn chuyển thông báo “Hello World” thành hàm băm md5 thì kết quả là a,

Mã hóa băm MD5 bằng Python?

Trong kịch bản cuộc sống thực, các hàm băm được sử dụng nhiều trong các thuật toán mật mã, trong chữ ký số, dấu vân tay, để lưu trữ mật khẩu và nhiều lĩnh vực khác. Là một lập trình viên python, chúng tôi cần các hàm băm để kiểm tra tính trùng lặp của dữ liệu hoặc tệp, để kiểm tra tính toàn vẹn của dữ liệu khi bạn truyền dữ liệu qua mạng công cộng, lưu trữ mật khẩu trong cơ sở dữ liệu, v.v.

Hai hàm băm hoặc thuật toán được sử dụng nhiều nhất là -

  • MD5 - MD5 hoặc thuật toán thông báo thông báo sẽ tạo ra giá trị băm 128 bit. Có một số vấn đề bảo mật với thuật toán md5 đó là lý do tại sao chúng tôi chủ yếu sử dụng nó để kiểm tra tính toàn vẹn của dữ liệu.

  • SHA - Có nhiều thuật toán thuộc nhóm SHA của thuật toán, được phát triển bởi tiêu chuẩn xử lý Thông tin Liên bang Hoa Kỳ. Các thuật toán này an toàn hơn nhiều so với md5 và do đó được sử dụng rộng rãi trong một số lĩnh vực bao gồm các ứng dụng mật mã. Thông báo được tạo ra bởi các thuật toán này nằm trong khoảng từ 160 bit đến 512 bit.

MD5

Thư viện chuẩn Python bao gồm một mô-đun được gọi là hashlib, chứa hầu hết các thuật toán băm phổ biến. Hầu hết các thuật toán được triển khai bên trong mô-đun hashlib, tuy nhiên, nếu bạn đã cài đặt OpenSSL, hashlib cũng có thể được sử dụng để làm việc với các thuật toán này.

Trước tiên, nếu bạn muốn sử dụng bất kỳ thuật toán băm nào, hãy nhập mô-đun băm -

import hashlib

Bây giờ để kiểm tra xem thuật toán được yêu cầu hay tất cả các thuật toán hiện có sẵn trong mô-đun hashlib -

>>> print(hashlib.algorithms_available)
{'sha3_256', 'sha3_224', 'sha1', 'blake2b', 'sha512', 'dsaEncryption', 'dsaWithSHA', 'DSA', 'md5', 'sha384', 'sha224', 'sha3_384', 'ecdsa-with-SHA1', 'DSA-SHA', 'SHA1', 'md4', 'SHA256', 'MD4', 'sha3_512', 'whirlpool', 'sha256', 'shake_256', 'SHA', 'RIPEMD160', 'shake_128', 'SHA512', 'ripemd160', 'SHA224', 'sha', 'blake2s', 'SHA384', 'MD5'}

Danh sách các thuật toán có sẵn ở trên thông qua mô-đun hashlib bao gồm các thuật toán thông qua OpenSSL.

Tuy nhiên, để kiểm tra danh sách các thuật toán luôn có sẵn, chúng tôi có thể kiểm tra danh sách đó thông qua powers_guaranteed.

>>> print(hashlib.algorithms_guaranteed)
{'sha3_512', 'sha256', 'sha3_256', 'shake_256', 'sha3_224', 'sha1', 'blake2b', 'sha512', 'md5', 'shake_128', 'sha384', 'sha224', 'sha3_384', 'blake2s'}

Hãy tạo một chương trình đơn giản thông qua thuật toán md5 -

import hashlib
hash_obj = hashlib.md5(b'Hello, Python!')
print(hash_obj.hexdigest())

Đầu ra

a0af7810eb5fcb84c730f851361de06a

Đoạn mã trên có dòng "Xin chào, Python!" chuỗi làm đầu vào và in thông báo HEX của chuỗi đó. Hexdigest trả về một chuỗi HEX đại diện cho hàm băm.

Tuy nhiên, nếu bạn muốn chuỗi byte được trả về, bạn nên sử dụng hash_obj.diget (), như -

import hashlib
hash_obj = hashlib.md5(b'Hello, Python!')
#To generate, sequence of bytes
print(hash_obj.digest())

Đầu ra

b'\xa0\xafx\x10\xeb_\xcb\x84\xc70\xf8Q6\x1d\xe0j'

Nếu bạn nhận thấy, chúng tôi đã sử dụng ‘b’ trước bất kỳ ký tự nào của chuỗi, điều này là để tạo các byte từ chuỗi vì hàm băm chỉ chấp nhận một chuỗi byte làm tham số.

Trong trường hợp bạn muốn chuyển chuỗi từ bảng điều khiển, đừng quên mã hóa chuỗi theo chuỗi byte -

import hashlib
mystring = input('Enter string to hash: ')
hash_obj = hashlib.md5(mystring.encode())
print(hash_obj.hexdigest())

Đầu ra

Enter string to hash: Hello, TutorialsPoint
9a5d3fad65690dcf44adaec67226abe7