これを言う2つの文があります:
1)アルゴリズムとデータ構造は、プログラミングの重要な部分です。アルゴリズムとデータ構造を紛失すると、すべてが失われます。
2)プログラミングはアルゴリズムとデータ構造であり、アルゴリズムとデータ構造はプログラミングの魂です。
これは私が言ったことではなく、無数のプログラマーによって要約されたことに注意してください。それは非常に現実的で洞察力があります。長い間継続的に開発したい場合は、より多くのアルゴリズムを研究する必要があります。今日は、暗号化アルゴリズムの対称暗号化アルゴリズムについて説明します。ここでは、対称暗号化アルゴリズムのプログラミングと使用を教えます。これには、3つの対称暗号化アルゴリズムが含まれています:DES、3DES、AESが含まれており、実用的な情報がいっぱいです。
1。対称パスワードアルゴリズム
対称暗号化アルゴリズムは、今日最も広く使用され、最も頻繁に使用される暗号化アルゴリズムです。ソフトウェア業界だけでなく、ハードウェア業界でも使用されています。あらゆる種類のインフラストラクチャが、セキュリティニーズを伴うときはいつでも、対称暗号化アルゴリズムを優先します。
対称暗号アルゴリズムの暗号化キーと復号化キーは同じです。ほとんどの対称暗号化アルゴリズムの場合、暗号化と復号化プロセスは反比例します。
(1)通信モデルを暗号化および復号化します
(2)機能:オープンアルゴリズム、小さな計算ボリューム、高速暗号化速度、高暗号化効率
(3)弱点:両方の当事者が同じキーを使用し、セキュリティは保証されていません
対称パスワードには2種類のタイプがあります。パスワードをストリーミングし、パスワードをパケットに入れますが、ブロックパスワードが一般的に使用されています。
(4)パスワード作業モードをブロックします
1)ECB:電子cipherbook(最も一般的に使用されている、各暗号化は独立した暗号文パケットを生成し、他の暗号文パケットには影響しません。つまり、暗号化後に同じプレーンテキストが生成されます)
2)CBC:ciphertextリンク(一般的に使用されます。プレーンテキスト暗号化の前に、以前の暗号文でXOR操作を実行する必要があります。つまり、同じプレーンテキスト暗号化の後に異なる暗号文が生成されます)
これら2つの一般的に使用される作業モードに加えて、次のことがあります。
3)CFB:パスワードフィードバック
4)OFB:出力フィードバック
5)CTR:カウンター
これらの5つの作業モードは、派生計算を実行する際に暗号化のアルゴリズムによって主に適用されます。
6.ブロックパスワードを入力する方法
1)nopadding:塗りつぶしなし
2)PKCS5PADDING:
3)ISO10126PADDING:
7.一般的に使用される対称パスワード:
1)DES(データ暗号化標準、データ暗号化標準)
2)3DES(トリプルデス、デーデ、トリプルデス暗号化アルゴリズム)
3)AES(高度な暗号化標準、高度なデータ暗号化標準、AESアルゴリズムは、DESに対する攻撃アルゴリズムに効果的に抵抗できます)
まず、これら3つのアルゴリズムの簡単な比較を見てみましょう。
| アルゴリズム | キー長 | デフォルトのキー長 | 作業モード | 充填方法 |
|---|---|---|---|---|
| des | 56 | 56 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB-ofB128 | nopadding、pkcs5padding、iso10126padding |
| 3des | 112、168 | 168 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB-ofB128 | nopadding、pkcs5padding、iso10126padding |
| AES | 128、192、256 | 128 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB-ofB128 | nopadding、pkcs5padding、iso10126padding |
対称暗号化を実装するために、DES/3DES/AESの3つのアルゴリズムを使用する方法を見てみましょう。
2。DESアルゴリズム
1.DES:データ暗号化標準、対称暗号化アルゴリズムのフィールドの典型的なアルゴリズム
2。機能:キーは短い(56ビット)、短いライフサイクル(ひび割れを避ける)
3。Javaの実装
1)キーを生成します
keygenerator keygen = keygenerator.getInstance( "des"); // key generator keygen.init(56); //キージェネレーターの初期化SecretKey = keeneratekey();
2)暗号化
SecretKey SecretKey = new SecretKeyspec(key、 "des"); // cipher cipher = cipher.getinstance( "des"); // cipherが暗号化を完了するか、ワーキングクラスのcipher.init(cipher.encrypt_mode、secretkey); cipher.dofinal(data); //暗号化データ
3)復号化
SecretKey SecretKey = new SecretKeyspec(key、 "des"); //キーシファーcipher = cipher.getInstance( "des"); // cipherが暗号化を完了するか、ワーキングクラスのcipher.init(cipher.decrypt_mode、secretkey); cipher.dofinal(data); // decrypts data
暗号化と復号化のために異なるモードを設定するだけであることがわかります。
3.3DESアルゴリズム
1.3DES:キーの長さを112または168ビットに増やし、反復回数を増やすことでセキュリティを改善します。
2。短所:処理速度の低下、長いキー計算時間、暗号化効率の低下
3。Javaの実装
1)キーを生成します
keygenerator keygen = keygenerator.getInstance( "desede"); // key generator keygen.init(168); //キーの長さは112または168として指定でき、デフォルトは168です。SecretKeySecretKey= keygen.genereTkey(); // key = secretkey.getEncoded(); // key byte array
2)3DES暗号化
SecretKey SecretKey = new SecretKeyspec(key、 "Desede"); // Key cipher cipher = cipher.getInstance( "dadede"); // cipherは、労働者クラスの暗号化または復号化を完了します。 cipher.dofinal(data); //暗号化データ
3)3DES復号化
SecretKey SecretKey = new SecretKeyspec(key、 "Desede"); // Key cipher cipher = cipher.getInstance( "dede"); // cipherは、労働者クラスの暗号化または復号化を完了します。 cipher.dofinal(data); // decrypts data
4。AESアルゴリズム(推奨)
1.AES:高度なデータ暗号化標準、DESアルゴリズムに対するすべての既知の攻撃に効果的に抵抗することができます
2。機能:短いキー設立時間、良好な感度、低メモリ要件、および高いセキュリティ
3。Javaの実装
1)キーを生成します
keygenerator keygen = keygenerator.getInstance( "aes"); // key generator keygen.init(128); //デフォルト128、ポリシー許可を取得しなかった後、それは192または256Secretkey secretKey = keygen.genertekey(); // key = secretkey.getencoded(); // key byte arrayを生成することができます。
2)AES暗号化
SecretKey SecretKey = new SecretKeyspec(key、 "aes"); //回復キー暗号= cipher.getInstance( "aes"); // cipherは、労働者クラスの暗号化または復号化を完了します。 cipher.dofinal(data); //暗号化データ
3)AES復号化
SecretKey SecretKey = new SecretKeyspec(key、 "aes"); // cipher cipher = cipher.getinstance( "aes"); // cipherは労働者クラスの暗号化または復号化を完了します。 cipher.dofinal(data); // decrypts data
便利なため、DES/3DES/AESアルゴリズムのツールクラスを作成しました。
この時点で、DES/3DES/AEの3つのアルゴリズムはすべて、対称暗号化を実装するために行われます。私はそれがすべての人の学習に役立つことを願っています、そして、私は誰もがwulin.comをもっとサポートすることを願っています。