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

Mã hóa SHA 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 SHA bằng Python?

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

Mã hóa SHA 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.

SHA1

SHA là một nhóm các thuật toán như - SHA1, SHA224, SHA256, SHA384, SHA512. Thuật toán SHA1, được coi là an toàn hơn md5 và do đó được sử dụng rộng rãi trong nhiều lĩnh vực.

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 để hiểu thuật toán sha1,

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

Đầu ra

00d375a3693fde63e9540b91656c6ac5b5341f7c

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.sha1(b'Hello, Python!')
#To generate, sequence of bytes
print(hash_obj.digest())

Đầu ra

b'\x00\xd3u\xa3i?\xdec\xe9T\x0b\x91elj\xc5\xb54\x1f|'

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.sha1(mystring.encode())
print(hash_obj.hexdigest())

Đầu ra

Enter string to hash: Hello, TutorialsPoint
b20d14ead3e50552fc1f1cd96696b111a163dffa