入力項目(Nバイト)を指定して、これを出力(まだNバイト)にマップする関数を探しています。関数は以下の性質を持つ必要があります。
- すべての入力が一部の出力にマップされ、2つの入力が同じ出力にマップされないように、1対1にする必要があります。
- 出力要素が与えられた場合、たとえマッピングが完全にわかっていても、その出力につながる入力を推測するのは難しいはずです。
そのような機能はありますか?詳細はどこで確認できますか?
入力項目(Nバイト)を指定して、これを出力(まだNバイト)にマップする関数を探しています。関数は以下の性質を持つ必要があります。
そのような機能はありますか?詳細はどこで確認できますか?
回答:
これは、一方向置換と呼ばれます。「順列」は、2つの要件のうちの最初のものを指します。「一方向」とは、2つの要件のうち2番目の要件を指します。たとえば、RSAモジュラスまたは他のスキームを法として3乗することを基にした、一方向の置換にはさまざまな候補構造があります。
あなたはDESやAESを見てみたいかもしれません、彼らはまさにあなたが望むことをしています。これらは、プレーンテキストを暗号化/非暗号化するキーの有無に応じたメソッドに変換されます。もう1つの方法は、デュアルキー(公開キーと秘密キー)を使用する方法です。これは、現在非常に一般的に使用されている方法であり、最も一般的な方法はRSAです。主に、すべての人に知られている公開キーと、自分だけのプライベートキーを使用することを深めています。それを知っている必要があります。そして、誰かがあなたに何かを送りたい場合、彼はあなたの公開鍵でそれを暗号化します(あなたの秘密鍵によってのみ破壊されるため、彼はもうそれを破壊することができないことに注意してください)。認証を行いたい場合は、秘密鍵で暗号化されたものを送信できます。受信者は公開鍵で暗号化を解除するので、確実に送信されます。
詳細はここにあります:
あなたはこれを試すことができます:
最初に、入力値のSHA-256またはその他のハッシュを取得します。次に、古典的なA = C、B = D、C = E ...などの基本的な暗号を使用します。
違いは、入力文字列全体のSHA-256を使用して、シフト量を決定することです(A = B、A = C、A = Dなど)。
注:私は暗号の専門家ではありません。これがどれほど安全かはわかりません。