プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

Blowfishアルゴリズムの操作は何ですか?


Blowfishは対称ブロック暗号アルゴリズムであり、一度に64ビットのブロック情報を暗号化します。これはFeistelネットワークに従い、このアルゴリズムの作業手順は2つの部分に分かれています。

  • サブキーの生成 −このプロセスは、最大448ビット長のキーを4168ビットを追加するサブキーに変換します。

  • データ暗号化 −データ暗号化プロセスでは、16回のネットワークを繰り返します。各ラウンドには、キーに依存する順列、およびキーとデータに依存する置換が含まれます。アルゴリズムの演算は、32ビットワードのXORまたは加算です。追加の操作は、ラウンドごとに4つのインデックス付き配列情報ルックアップのみです。

これらの2つの部分について説明しましょう-

  • サブキーの生成 − Blowfish暗号化アルゴリズムは、膨大な数のサブキーを使用します。これらのキーは、データの暗号化または復号化のいずれかよりも早く作成されます。

    p-arrayには、18個の32ビットサブキーが含まれています-

    P1、P2、…………。、P18。

    4つの32ビットSボックスがあり、それぞれに256のエントリが含まれています-

    S1,0、S1,1、………。 S1,255

    S2,0、S2,1、……….. S2,255

    S3,0、S3,1、……….. S3,255

    S4,0、S4,1、………... S4,255

    サブキーを生成する手順

    • 最初に、P配列、したがって4つのSボックスを順番に固定文字列で初期化します。また、この文字列には、πの16進数も含まれます。

      P1 =0x243f6a88、P2 =0x85a308d3、P3 =0x13198a2e、P4=0x3707344など

    • キーの最初の32ビットを含むXORP1、キーの32ビットである2番目のXOR P2など、キーのすべてのビット(おそらくP14まで)。完全なPアレイがキービットとXORされるまで、キービットを介して手順を繰り返し循環します。 (短いキーごとに、部分的に1つの同等の長いキーがあります。たとえば、Aが64ビットキーの場合、AA、AAAなどは同じキーです。)

    • ステップ1とステップ2で定義されたサブキーを利用して、Blowfishアルゴリズムですべてゼロの文字列を暗号化できます。

    • 手順(3)の64ビット出力でP1とP2を復元できます。

    • サブキーが変更されたアルゴリズムを使用して、ステップ(3)の出力を暗号化できます。

    • 手順(5)の出力でP3とP4を復元できます。

    • これを使用して手順を続行し、P配列のすべてのエントリを復元してから、4つのSボックスすべてを順番に復元し、継続的に変化するアルゴリズムの出力を使用できます。

  • 必要なすべてのサブキーを作成するには、合計521回の反復が必要です。アプリケーションは、この派生プロセスを複数回実行する代わりに、サブキーを保存できます。

  • データ暗号化 − Blowfishは、16ラウンドを含むFeistelネットワークです。

    入力は64ビットのデータ要素xです。

    xを2つの32ビットの半分に分割します:x L 、x R

    次に、i=1から16の場合;

    x L =x L XOR P i

    x R =F(x L )XOR x R

    x Lを交換します およびxR

    16回目以降 ラウンド、スワップx L およびxR 最後のスワップを元に戻すためにもう一度。

    次に、暗号文=x Lの連結 およびxR 、x R =x R XORP17およびxL =x L XOR P 18

    最後に、x Lを再結合します およびxR 暗号文を取得します。復号化は暗号化と同等ですが、P1、P2、……P18は逆の順序で使用されます。


  1. C言語でのシフト演算とは何ですか?

    問題 C言語を使用して、数値の左シフト、右シフト、および補数を表示する簡単なプログラムは何ですか? 解決策 左シフト 変数の値が1回左シフトされると、その値は2倍になります。 たとえば、a =10、次にa <<1 =20 右シフト 変数の値を1回右シフトすると、その値は元の値の半分になります。 1 =5 例 以下はシフト操作のCプログラムです- #include<stdio.h> main (){    int a=9;    printf("Rightshift of a = %d\n",a&

  2. C#のコメントは何ですか?

    コメントはコードの説明に使用されます。コンパイラはコメントエントリを無視します。 C#プログラムの複数行コメントは、以下に示すように/ *で始まり、文字*/で終わります。 複数行のコメント /* The following is a mult-line comment In C# /* /*...*/はコンパイラによって無視され、プログラムにコメントを追加するために配置されます。 1行のコメント // variable int a = 10; 以下は、単一行コメントと複数行コメントを追加する方法を示すサンプルC#プログラムです- 例 using System; namespace Dem