この記事では、des暗号化と復号化アルゴリズムのJava実装の分析について説明します。次のように、参照のために共有してください。
導入:
データ暗号化アルゴリズム(DEA)は、特に財務データのセキュリティを保護する上で、最も広く使用されているキーシステムである可能性が高い対称暗号化アルゴリズムです。最初に開発されたDEAは、ハードウェアに埋め込まれていました。通常、自動テラーマシン(ATM)はDEAを使用します。これは、数年間特許権もあったIBMの研究作業に由来していますが、1983年に失効した後、公共の範囲であり、特許の使用料なしで特定の条件下で使用できるようになります。 1977年に米国政府によって正式に採用されました。
1998年以降の実用的なDES分解の出現は、DESアルゴリズムがもはや安全ではないことを完全に宣言しました。 1999年、NISTは新しい標準を発行し、DESアルゴリズムはレガシー暗号化システムでのみ使用できるが、Desedeアルゴリズムの使用を制限しないことを規定しています。今日のDESアルゴリズムは歴史の段階を起動しており、AESアルゴリズムはその置換と呼ばれます。
暗号化の原則:
DESは、最大64ビットパケットサイズを生成するために、追加の8ビットパリティビットで56ビットキーを使用します。これは、Feistelと呼ばれる手法を使用した反復ブロックパスワードであり、暗号化されたテキストブロックは2つに分割されます。サブキーを使用してループ関数を半分に適用し、「排他的または」操作を残している。次に、これらの2つの半分を交換すると、プロセスが継続されますが、最後のループは交換されません。 DESは、16サイクル、4つの基本操作の使用:排他的または順列、置換、およびシフト操作。
DESアルゴリズムに対するJDKのサポート
キー長:56ビット
作業モード:ECB/CBC/PCBC/CTR/CTS/CFB/CFB8からCFB128/OFB/OBF8からOFB128へ
充填方法:nopadding/pkcs5padding/iso10126padding/
Java暗号化と復号化対称暗号化アルゴリズムDesede
DaSedeは、3DESまたはTriple DESとしても知られるトリプルデス暗号化アルゴリズムです。 3つ(または2つ)の異なるキーを使用して、データブロックを3回(または2つ)DESの暗号化します(暗号化は、通常の暗号化を3回行うよりも速くなります)。トリプルDESの強度は、112ビットの重要な強度とほぼ同じです。セキュリティは反復回数によって改善されますが、暗号化効率が低いという問題も発生します。 Deded Algorithmの効率のため、AESアルゴリズムが生まれました。
これまでのところ、トリプルDESを攻撃する効果的な方法を誰も与えていません。キースペースのキーを検索すると、スペースが大きすぎるため、実際には実行可能ではありません。微分攻撃法を使用すると、複雑さは単一のDESと比較して指数関数的に増加します。
トリプルDESには4つのモデルがあります
DESアルゴリズムのJava暗号化コード
パッケージcom.favccxx.codelib; import java.security.securerandom; import javax.crypto.cipher; import javax.crypto.secretkey; import javax.crypto.secretkeyFactory; Import javax.crypto.spec.deskeyspec; piblic class entkepec; piblic class entkepec; "despec; pibrice interkeyspec; public static byte [] encrypt(byte [] src、byte [] key)スロー例外{// des algorithmには、信頼できる乱数ソースSecurerandom sr = new Securerandom()が必要です。 //元のキーデータからdeskeyspecオブジェクトを作成しますdeskeyspec dks = new deskeyspec(key); //キーファクトリを作成し、それを使用してdeskeyspecをSecretKey Objectに変換しましたsecretkeyfactory keyfactory = secretkeyfactory.getInstance(des); SecretKey SecureKey = keyFactory.generateSecret(dks); //暗号オブジェクトは実際に暗号化操作cipher cipher = cipher.getInstance(des)を完了します。 // cipherオブジェクトの初期化cipher.init(cipher.encrypt_mode、securekey、sr); //暗号化操作の正式な実行cipher.dofinal(src); } / **** @paramパスワードパスワード* @paramキー暗号化文字列* @return* / public final static string encrypt(string password、string key){try {return byte2string(ecrypt(password.getBytes()、key.getBytes()); } catch(例外e){} nullを返します。 } public static string byte2string(byte [] b){string hs = "";文字列stmp = ""; for(int n = 0; n <b.length; n ++){stmp =(java.lang.integer.tohexstring(b [n]&0xff)); if(stmp.length()== 1)hs = hs + "0" + stmp; else hs = hs + stmp; } return hs.touppercase(); } public static void main(string [] args){string encryptString = encrypt( "is zhang sanfeng"、 "test中国人と英語の混合 @123654 {"); System.out.println(encryptString); } // output:b00542e93695f4cfce34fc4393c2f4bf} DES DecryptionアルゴリズムのJava実装
パッケージcom.favccxx.codelib; import java.security.securerandom; import javax.crypto.cipher; import javax.crypto.secretkey; import javax.crypto.secretkeyfactory; Import Javax.crypto.spec.deskeyspec; piblic descrypec; piblic class descrypec; / ** * * @param SRCデータソース * @paramキーキー、長さは8 * @return */ @throws例外 */ public static byte [] decrypt(byte [] src、byte [] key)をスローする必要があります。 //元のキーデータからdeskeyspecオブジェクトを作成しますdeskeyspec dks = new deskeyspec(key); //キーファクトリを作成し、それを使用してDeskeysPecオブジェクトをSecretKeyオブジェクトに変換しましたsecretKeyFactory keyFactory = SecretKeyFactory.getInstance(des); SecretKey SecureKey = keyFactory.generateSecret(dks); //暗号オブジェクトは実際に復号化操作を完了しますcipher cipher = cipher.getInstance(des); // cipherオブジェクトの初期化cipher.init(cipher.decrypt_mode、securekey、sr); //復号化操作の正式な実行Cipher.Dofinal(SRC); } public final static string decrypt(string data、string key){try {return new string(decrypt(data.getBytes())、key.getBytes())); } catch(Exception e){e.printstacktrace(); } nullを返します。 } public static byte [] string2byte(byte [] b){if((b.length%2)!= 0)新しいIllegalargumentException( "長さは均等ではない"); byte [] b2 = new byte [b.length / 2]; for(int n = 0; n <b.length; n += 2){string item = new String(b、n、2); b2 [n / 2] =(byte)integer.parseint(item、16); } b2を返します。 } public static void main(String [] args){String DesencryptString = Decrypt( "B00542E93695F4CFCE34FC4393C2F4BF"、 "Test berins and Inglish and Inglish Mixed-up @123654"); System.out.println(desencryptString); } //出力:Zhang Sanfengです}この記事があなたに役立つことを願っています。これは、DES暗号化と復号化アルゴリズムのJava実装の分析コンテンツを導入するためのすべてです。みんなが私たちのウェブサイトをフォローし続けることを願っています! Javaを学びたい場合は、このWebサイトをフォローし続けることができます。