Python Forensics - Hàm băm

A hash functionđược định nghĩa là hàm ánh xạ trên một lượng lớn dữ liệu đến một giá trị cố định với độ dài xác định. Hàm này đảm bảo rằng cùng một đầu vào cho ra cùng một đầu ra, thực sự được định nghĩa là một tổng băm. Tổng băm bao gồm một đặc tính với thông tin cụ thể.

Chức năng này thực tế là không thể hoàn nguyên. Vì vậy, bất kỳ cuộc tấn công nào của bên thứ ba như tấn công vũ phu là không thể thực hiện được. Ngoài ra, loại thuật toán này được gọi làone-way cryptographic algorithm.

Một hàm băm mật mã lý tưởng có bốn thuộc tính chính:

  • Phải dễ dàng tính toán giá trị băm cho bất kỳ đầu vào nhất định nào.
  • Nó phải không khả thi để tạo đầu vào ban đầu từ hàm băm của nó.
  • Không thể sửa đổi đầu vào mà không thay đổi hàm băm.
  • Không thể tìm thấy hai đầu vào khác nhau với cùng một hàm băm.

Thí dụ

Hãy xem xét ví dụ sau giúp khớp mật khẩu bằng cách sử dụng các ký tự ở định dạng thập lục phân.

import uuid
import hashlib
  
def hash_password(password):
   # userid is used to generate a random number
   salt = uuid.uuid4().hex #salt is stored in hexadecimal value
   return hashlib.sha256(salt.encode() + password.encode()).hexdigest() + ':' + salt
     
def check_password(hashed_password, user_password):
   # hexdigest is used as an algorithm for storing passwords
   password, salt = hashed_password.split(':')
   return password == hashlib.sha256(salt.encode()
      + user_password.encode()).hexdigest()

new_pass = raw_input('Please enter required password ')
hashed_password = hash_password(new_pass)
print('The string to store in the db is: ' + hashed_password)
old_pass = raw_input('Re-enter new password ')

if check_password(hashed_password, old_pass):
   print('Yuppie!! You entered the right password')
else:
   print('Oops! I am sorry but the password does not match')

Sơ đồ

Chúng tôi đã giải thích logic của chương trình này với sự trợ giúp của sơ đồ sau:

Đầu ra

Mã của chúng tôi sẽ tạo ra kết quả sau:

Mật khẩu được nhập hai lần khớp với hàm băm. Điều này đảm bảo rằng mật khẩu được nhập hai lần là chính xác, giúp thu thập dữ liệu hữu ích và lưu chúng ở định dạng được mã hóa.