あなたがしていることは、それ自体「暗号化」ではありません。それは「ハッシュ」です。この2つの主な違いは、暗号化は簡単に元に戻せることです(もちろん正しいキーを使用)。一方、ハッシュは元のメッセージを最初に知っている以外の状況では、元に戻すのが非常に難しいように設計されています。
理論的には、ハッシュは「ランダムなオラクル」をシミュレートします。これは、アイデティックなメモリを備えた仮想的なホムンクルであり、範囲の上限のない完全に一意の完全にランダムな数値を生成する方法です。この小さな男にメッセージを与えると、2つのことが起こります。彼は以前にメッセージを見たことがなく、その場合、彼は新しい乱数を生成してそれをダイジェストとしてあなたに渡します、または彼は以前にそのメッセージを見たことがあります。初めて。その理論モデルでは、メッセージとそのダイジェストの間にゼロの関係があり、RNGから単一の番号が2回現れることはないため、衝突の可能性はありません。
残念ながら、理想的なランダムオラクルはありません。このアイデアには、デジタル実装には実用的な不可能性があります。たとえば、オラクルがどこでも誰でもハッシュしたすべてのメッセージを効率的に保存して効率的に呼び出す機能や、クライアントが数百または数千桁の数値を受け入れる機能などです。長さで。代わりに、メッセージ自体に作用する不可逆的な(一方向の)数学演算であるハッシュ関数を使用して、明確な変換なしで確定的な変換(同じメッセージ=>同じハッシュ)を作成します。ハッシュと元のメッセージの関係。コメントで述べたように、メッセージに体系的な変更を加えることによって生成されるハッシュ値には、予測可能な変更はありません。理想的には、メッセージの1ビットに変更が加えられた場合、ダイジェストの各ビットが変更される可能性は50%です。
ハッシュ関数には多くの用途があります。これらは、両方の当事者がプレーンテキストのシークレットを知る必要なしにチャレンジ検証(パスワードなどのログイン資格情報を考える)に使用され、メッセージが改ざんまたは破損されていないことを確認するためのチェックサムとして使用されます。いわゆる「作業証明」シナリオでも使用されます。完了するのは難しいが検証が簡単な計算タスク。
SHA256ハッシュダイジェストを効率的にリバースして、そのハッシュをもたらすメッセージ(任意のメッセージ)を生成する方法を見つけたとしたら、それは実際にはハッシュが根本的に壊れていることを示す証拠です。SHA256は実際には安全であると考えられています。つまり、ハッシュダイジェストから始めて、すべての可能性を試してみるよりも作業が少なくてすむメッセージ(SHA-256の場合は理想的には2 ^ 256〜= 10 ^ 77の可能性)。