Q1SHA-256 のhexdigest()が返す文字列の長さはどれですか?
hashlib — データのハッシュ値を計算する
hashlib.sha256の64文字ハッシュ、決定性・雪崩効果・一方向性の3性質、改ざん検出、パスワード保存にbcrypt/argon2を使う理由を実例で学べます。
hashlibは任意のバイト列から固定長のハッシュ値を計算する標準ライブラリです。代表的なSHA-256は256 ビット = 64 文字の 16 進文字列を返し、ファイル整合性チェック・API 署名・Git のコミット IDなど「中身が同じか確認したい」場面で広く使われています。
pickleやbase64と違って、hashlib は出力から元の入力を復元できない一方通行の変換です。「保存・復元」用途ではなく、「同じか違うかだけ判定したい」用途に使う、という違いを押さえておきましょう。
SHA-256 — 64 文字の 16 進ハッシュと 3 つの性質
| メソッド / アルゴリズム | ビット長 | 用途 |
|---|---|---|
| hashlib.sha256(b) | 256 bit (64 hex 文字) | ファイル整合性・API 署名(推奨) |
| hashlib.sha512(b) | 512 bit (128 hex 文字) | より長いハッシュ値が要るとき |
| hashlib.md5(b) | 128 bit (32 hex 文字) | 衝突攻撃あり、新規には使わない |
| .hexdigest() | — | 16 進文字列で取り出す |
| .digest() | — | 生バイト列で取り出す |
パスワード保存に hashlib だけは使わない
ユーザーパスワードをsha256 のような単純なハッシュで保存するだけだと、事前計算(レインボーテーブル)で逆引きされる可能性があります。ソルト + ストレッチングを組み込んだbcrypt / argon2 / passlibなどの専用ライブラリを使って対策できます。hashlibはファイル整合性チェックや API 署名のような「同じ入力か確認したい」用途に向きます。
決定性と雪崩効果を確かめる
ハッシュ関数の特徴のうち、「同じ入力なら同じ出力」(決定性)と「1 文字違うだけで全然違う出力」(雪崩効果)を、2 種類の入力を比較することで確認します。この 2 つが成り立つから、ファイル整合性チェックや改ざん検出に使えます。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2同じ入力から計算した SHA-256はどうなりますか?
Q3ハッシュ値から元の入力を復元することはできますか?
Q4ユーザーパスワードを保存するとき、最も適切な選択肢はどれですか?