ホームページ >Java >&#&チュートリアル >Java での 3 つの対称暗号化アルゴリズム DES/3DES/AES の実装
これを表す文が 2 つあります:
1) アルゴリズムとデータ構造はプログラミングの重要な部分です。アルゴリズムとデータ構造を失うと、すべてが失われます。
2) プログラミングはアルゴリズムとデータ構造です アルゴリズムとデータ構造はプログラミングの魂です。
これは私が言ったことではないことに注意してください。私が言ったことは非常に実践的で洞察力に富んだものです。長期的かつ持続可能な方法で開発したいなら、今日私はもっとアルゴリズムを勉強する必要があります。対称暗号化アルゴリズムについて説明します。ここでは、対称暗号化アルゴリズムのプログラミングと使用法について説明します。これには、DES、3DES、AES という 3 つの対称暗号化アルゴリズムのプログラミングと使用が含まれており、役立つ情報が満載です。
対称暗号化アルゴリズムは、現在最も広く使用されており、最も頻繁に使用されている暗号化アルゴリズムです。ソフトウェア業界だけでなく、ハードウェア業界でも広く使用されています。セキュリティ要件がさまざまなインフラストラクチャに関係する場合は常に、対称暗号化アルゴリズムが優先されます。
対称暗号アルゴリズムの暗号化キーと復号キーは同じです。ほとんどの対称暗号アルゴリズムでは、暗号化プロセスと復号化プロセスが逆になります。
(1)暗号化・復号化通信モデル
(2) 特徴: オープンアルゴリズム、少ない計算量、速い暗号化速度、高い暗号化効率
(3) 弱点: 双方が同じ鍵を使用するため、セキュリティが保証されない
対称暗号にはストリーム暗号とブロック暗号が含まれますが、現在はブロック暗号が一般的に使用されています:
(4) ブロック暗号動作モード
1) ECB: 電子コードブック (最も一般的に使用され、各暗号化は独立した暗号文グループを生成し、他の暗号文グループには影響しません。つまり、暗号化後に同じ平文から同じ暗号文が生成されます)
2) CBC: 暗号文リンク (平文の暗号化を前の暗号文と XOR する必要がある前に一般的に使用されます。つまり、同じ平文が暗号化後に異なる暗号文を生成します)
3) CFB: 秘密のテキストフィードバック
4) OFB: 出力フィードバック
5) CTR: カウンター
これら 5 つの動作モードは、主に、導出計算を実行するときに暗号化アルゴリズムによって使用されます。
6.ブロックパスワード入力方法
1) NoPadding: パディングなし
2) PKCS5パディング:
3) ISO10126パディング:
7. よく使用される対称パスワード:
1) DES (データ暗号化規格、データ暗号化規格)
2) 3DES (トリプル DES、DESede、トリプル DES 暗号化アルゴリズム)
3) AES (Advanced Encryption Standard、高度なデータ暗号化標準、AES アルゴリズムは DES に対する攻撃アルゴリズムに効果的に抵抗できます)
まず、これら 3 つのアルゴリズムの簡単な比較を見てみましょう:
アルゴリズム | キーの長さ | デフォルトのキーの長さ | ワーキングモード | 充填方法 |
---|---|---|---|---|
デス | 56 | 56 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 | NoPadding、PKCS5Padding、ISO10126Padding |
3DE | 112、168 | 168 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 | NoPadding、PKCS5Padding、ISO10126Padding |
AES | 128、192、256 | 128 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 | NoPadding、PKCS5Padding、ISO10126Padding |
3 つのアルゴリズム DES / 3DES / AES を使用して対称暗号化を実装する方法を見てみましょう:
1.DES: Data Encryption Standard、対称暗号化アルゴリズムの分野における代表的なアルゴリズム
2. 特徴: 短い鍵 (56 ビット)、短いライフサイクル (クラックを避けるため)
3.Java実装
1) キーを生成する
KeyGenerator keyGen = KeyGenerator.getInstance("DES");//密钥生成器 keyGen.init(56);//初始化密钥生成器 SecretKey secretKey = keyGen.generateKey();//生成密钥 byte[] key = secretKey.getEncoded();//密钥字节数组
2) 暗号化
SecretKey secretKey = new SecretKeySpec(key, "DES");//恢复密钥 Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作类 cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,加密模式 byte[] cipherByte = cipher.doFinal(data);//加密data
3) 復号化
SecretKey secretKey = new SecretKeySpec(key, "DES");//恢复密钥 Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作类 cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式 byte[] cipherByte = cipher.doFinal(data);//解密data
暗号化と復号化に異なるモードを設定しているだけであることがわかります。
1.3DES: 鍵の長さを 112 ビットまたは 168 ビットに増やし、反復回数を増やすことでセキュリティを向上させます
2. デメリット: 処理速度が遅い、鍵計算に時間がかかる、暗号化効率が低い
3.Java実装
1) キーを生成する
KeyGenerator keyGen = KeyGenerator.getInstance("DESede");//密钥生成器 keyGen.init(168); //可指定密钥长度为112或168,默认为168 SecretKey secretKey = keyGen.generateKey();//生成密钥 byte[] key = secretKey.getEncoded();//密钥字节数组
2) 3DES 暗号化
SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢复密钥 Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作类 cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式 byte[] cipherByte = cipher.doFinal(data);//加密data
3) 3DES 復号化
SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢复密钥 Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作类 cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式 byte[] cipherByte = cipher.doFinal(data);//解密data
1.AES: Advanced Data Encryption Standard。DES アルゴリズムに対する既知のすべての攻撃に効果的に対抗できます
2. 特徴: 短いキー確立時間、優れた感度、低いメモリ要件、高いセキュリティ
3.Java実装
1) キーを生成する
KeyGenerator keyGen = KeyGenerator.getInstance("AES");//密钥生成器 keygen.init(128); //默认128,获得无政策权限后可为192或256 SecretKey secretKey = keyGen.generateKey();//生成密钥 byte[] key = secretKey.getEncoded();//密钥字节数组
2) AES暗号化
SecretKey secretKey = new SecretKeySpec(key, "AES");//恢复密钥 Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作类 cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式 byte[] cipherByte = cipher.doFinal(data);//加密data
3) AES 復号化
SecretKey secretKey = new SecretKeySpec(key, "AES");//恢复密钥 Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作类 cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式 byte[] cipherByte = cipher.doFinal(data);//解密data
使いやすさを考慮して、DES/3DES/AES の 3 つのアルゴリズム用のツール クラスを作成しました。アドレス: https://github.com/smartbetter/Android-UtilsLibrary (新しい DES/3DES/AES ツール クラス)。
以上がJava での 3 つの対称暗号化アルゴリズム DES/3DES/AES の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。