Python-forensics-hash-function

提供:Dev Guides
移動先:案内検索

Pythonフォレンジック-ハッシュ関数

  • ハッシュ関数*は、指定された長さの固定値に大量のデータをマッピングする関数として定義されます。 この関数は、同じ入力が同じ出力になり、実際にハッシュ和として定義されることを保証します。 ハッシュ合計には、特定の情報を持つ特性が含まれます。

この機能を元に戻すことは事実上不可能です。 したがって、ブルートフォース攻撃のようなサードパーティの攻撃は事実上不可能です。 また、この種のアルゴリズムは*一方向暗号アルゴリズム*と呼ばれます。

理想的な暗号化ハッシュ関数には4つの主要な特性があります-

  • 任意の入力のハッシュ値を簡単に計算できる必要があります。
  • ハッシュから元の入力を生成することは実行不可能でなければなりません。
  • ハッシュを変更せずに入力を変更することは実行不可能でなければなりません。
  • 同じハッシュを持つ2つの異なる入力を見つけることは実行不可能でなければなりません。

16進形式の文字を使用してパスワードを照合するのに役立つ次の例を検討してください。

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

フローチャート

私たちは次のフローチャートの助けを借りてこのプログラムのロジックを説明しました-

ハッシュ関数フローチャート

出力

私たちのコードは次の出力を生成します-

ハッシュ関数の出力

2回入力されたパスワードは、ハッシュ関数と一致します。 これにより、2回入力されたパスワードが正確になり、有用なデータを収集して暗号化された形式で保存するのに役立ちます。