Python Forensics 简明教程

Python Forensics - Hash Function

hash function 被定义为函数,它映射到固定长度的大量数据,该函数确保相同的输入会生成相同的输出,而这实际上定义为哈希和。哈希和包含特定信息的一部分特征。

这个函数实际上不可能被还原。因此,任何第三方攻击(例如暴力破解攻击)在实际上是不可能的。而且,这种算法被称为 one-way cryptographic algorithm

一个理想的密码哈希函数具有四个主要的属性:

  1. 它一定很容易为任何给定的输入计算哈希值。

  2. 生成原始的输入从它的哈希是不可能的。

  3. 修改输入而不改变哈希是不可能的。

  4. 找到具有相同哈希的两个不同的输入是不可能的。

Example

考虑以下示例,它有助于使用十六进制格式的字符来匹配密码。

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')

Flowchart

我们已用以下流程图解释了此程序的逻辑:

hash function flowchart

Output

我们的代码将生成以下输出:

hash function output

两次输入的密码与哈希函数匹配。这确保了两次输入的密码是准确的,这有助于收集有用的数据并以加密格式将它们保存。