Pythonフォレンジック-ハッシュ関数
A hash functionは、大量のデータを指定された長さの固定値にマップする関数として定義されています。この関数は、同じ入力が同じ出力になることを保証します。これは実際にはハッシュ合計として定義されます。ハッシュ合計には、特定の情報を持つ特性が含まれています。
この機能を元に戻すことは事実上不可能です。したがって、ブルートフォース攻撃のようなサードパーティの攻撃は事実上不可能です。また、この種のアルゴリズムはone-way cryptographic algorithm。
理想的な暗号化ハッシュ関数には、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回入力したパスワードが正確になり、有用なデータを収集して暗号化された形式で保存するのに役立ちます。