0

わかりました、皆さんが私を叱責する前に: 私はこれが恐ろしいコードであり、非常に弱い暗号であることを認識しています。以下がブロック暗号であると見なされるかどうかを調べようとしています(非常に初歩的で弱いものでも)

int main(){
   int mac = 123;
   int key = 789;

   int enc = mac^key;
   printf("encrypted text  =  %d\n",enc);

   int plain = enc^key;
   printf("decrypted text = %d\n",plain);

   return 0;
}

出力は次のとおりです。

encrypted text  =  878
decrypted text = 123
4

1 に答える 1

5

ブロック暗号を作成するために従わなければならない特定の一般性があります。あなたが示したコードは、技術的にはブロック暗号ではありません。次のような一般性:

  • ブロック暗号では、メッセージはブロックに分割されそれぞれ暗号化されます(つまり、非常に大きな文字の置換のように - 64 ビット以上)。
  • ブロック暗号は、暗号化用の 1 つE と復号化用のもう1 つのアルゴリズム E-1 の 2 つの対になったアルゴリズムで構成されます。どちらのアルゴリズムも、サイズ n ビットの入力ブロックとサイズ k ビットのキーの2 つの入力を受け入れ、n ビットの出力ブロックを生成します。任意の 1 つの固定キーの場合、復号化は暗号化の逆関数です

ブロック暗号モード (ECB、CBC) での暗号化は、特定のフローを使用します。

  • ブロック暗号が最初に行う必要があるのは、平文を同じサイズのブロック(通常は 8 バイト) に分割することです。たとえば、imablock.
  • 暗号を使用して平文を暗号化します。
  • メッセージを復号化します。

暗号の選択は実装に依存します。

つまり、暗号化-復号化の流れをたどったかもしれませんが、プログラムはブロック暗号の一般性を満たしていません対称暗号を実装するには、メッセージをブロックに分割する必要があります。

あなたが実装したのは単純な暗号化であり、ブロック暗号ではありません

非常に多くの参照があります:

それが役に立てば幸い。:)

于 2013-10-01T05:30:02.720 に答える