はじめに ハッシュ関数はデータの整合性確認や暗号学的な用途でよく使用されます。この記事では、ハッシュ関数の中でもよく使われるSHA-256を自分で実装しつつ、なぜ元の値を復元できない(非可逆性)の性質を持つのか確認します。 結論はハッシュ関数の非可逆性は、情報の喪失により実現されています。 また、今回sha256を実装したRustのコードは以下です。 https://github.com/akira-19/algorithms_rust/tree/main/sha-256 SHA-256のフロー 非可逆性がわかるところまでのSHA-256のフローは以下のようになっています。 "msg"という文字列をハッシュ化します。 まずmsgという文字列を文字コードに置き換えます。(16進数表記) 次に、メッセージを64バイトの1つのまとまりにします。この際に、元のメッセージのすぐ後ろに0x80を追加し