対称暗号化(DES、3DES、AES)の Java 実装の詳細な説明

高洛峰
リリース: 2017-01-24 11:06:32
オリジナル
3245 人が閲覧しました

これを表す文が 2 つあります:

1) アルゴリズムとデータ構造はプログラミングの重要な部分です。アルゴリズムとデータ構造を失うと、すべてを失います。

2) プログラミングはアルゴリズムとデータ構造です。アルゴリズムとデータ構造はプログラミングの魂です。

これは私が言ったことではなく、私が言ったことは非常に実践的で洞察力に富んだものです。長期的に持続可能な開発を望むなら、今日はもっとアルゴリズムを勉強する必要があります。暗号化については、アルゴリズムの対称暗号化アルゴリズムについて説明します。ここでは、対称暗号化アルゴリズムをプログラミングして使用する方法を説明します。これには、DES、3DES、AES という 3 つの対称暗号化アルゴリズムのプログラミングと使用が含まれており、役立つ情報が満載です。

1. 対称暗号アルゴリズム

対称暗号アルゴリズムは、現在最も広く使用されており、最も頻繁に使用されている暗号化アルゴリズムです。ソフトウェア業界だけでなく、ハードウェア業界でも広く使用されています。セキュリティ要件がさまざまなインフラストラクチャに関係する場合は常に、対称暗号化アルゴリズムが優先されます。

対称暗号アルゴリズムの暗号化キーと復号キーは同じです。ほとんどの対称暗号アルゴリズムでは、暗号化プロセスと復号プロセスが逆になります。

(1) 暗号化と復号の通信モデル

対称暗号化(DES、3DES、AES)の Java 実装の詳細な説明

(2) 特徴: オープンなアルゴリズム、少ない計算、速い暗号化速度、高い暗号化効率

(3) 弱点: 双方が同じ鍵を使用するため、セキュリティが脆弱高 保証されていません

対称暗号にはストリーム暗号とブロック暗号が含まれますが、現在はブロック暗号が一般的に使用されています:

(4) ブロック暗号動作モード

1) ECB: 電子コードブック (最も一般的に使用され、暗号化が生成されるたびに独立したコード)

2) CBC: 暗号文リンク (一般的に使用される、平文暗号化以前の暗号文と XOR 演算を実行する必要があります)まず、同じ平文が暗号化後に異なる暗号文を生成します)

これら 2 つの一般的に使用される動作モードに加えて、次のようなものがあります:

3) CFB: 暗号文フィードバック

4) OFB: 出力フィードバック

5) CTR: Counter

これら 5 つの動作モードは、推論計算を実行するときに暗号化アルゴリズムによって主に使用されます。

6. ブロック暗号のパディング方式

1) NoPadding: パディングなし

2) PKCS5Padding:

3) ISO10126Padding:

7.暗号化規格、データ暗号化標準)


2) 3DES (Triple DES、DESede、トリプル DES 暗号化アルゴリズム)


3) AES (Advanced Encryption Standard、高度なデータ暗号化標準、AES アルゴリズムは DES に対する攻撃アルゴリズムに効果的に抵抗できます)

まず、これら 3 つのアルゴリズムの簡単な比較を見てみましょう:


対称暗号化(DES、3DES、AES)の Java 実装の詳細な説明 3 つのアルゴリズム DES / 3DES / AES を使用して対称暗号化を実装する方法を見てみましょう:

2.DES アルゴリズム

1.DES: データ暗号化標準は、対称暗号化アルゴリズムの分野における典型的なアルゴリズムです


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
ログイン後にコピー

暗号化と復号化に異なるモードを設定しているだけであることがわかります。

3.3DES アルゴリズム

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
ログイン後にコピー

4.AESアルゴリズム (推奨)

1.AES: 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暗号化ツール クラス、アドレス: ダウンロード アドレス (新しい DES/3DES/AES ツール クラス) として記述されています。

以上です。DES / 3DES / AES の 3 つのアルゴリズムが対称暗号化を実装します。これが皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。

対称暗号化 (DES、3DES、AES) 関連記事の Java 実装の詳細な説明については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート