- ECB
sun.misc.BASE64Decoderインポート; javax.cryptoのインポート* ;. インポートjavax.crypto.spec.DESKeySpec; インポートにjava.io.IOException; インポートjava.security.InvalidKeyException; インポートjava.security.Key; インポートjava.security.NoSuchAlgorithmException ; インポートjava.security.spec.InvalidKeySpecException; publicクラス暗号{ パブリック静的バイト[] initSecretKey()が持つNoSuchAlgorithmException {スロー //指定された鍵生成アルゴリズムである ;のKeyGeneratorキロ= KeyGenerator.getInstance( "DES") //初期化キーをジェネレータ、秘密鍵は、サイズ持つように決定される kg.initを(56である); //秘密鍵を生成する のSecretKey kg.generateKeyのSecretKey =(); 戻り(secretkey.getEncoded); } 静的バイトパブリック[]暗号化(バイト[]キー、SRC列が)例外:InvalidKeyException、持つNoSuchAlgorithmException、InvalidKeySpecException指定、NoSuchPaddingException、BadPaddingException、IllegalBlockSizeExceptionをスロー{ //初期化キーJDK DES変換キー はDESKeySpecはDESKeySpec =新しい新しいはDESKeySpec(キー) を作成//植物キーの例 するSecretKeyFactoryするSecretKeyFactory = SecretKeyFactory.getInstance( "DES"); //秘密鍵生成 秘密鍵秘密鍵= SecretKeyFactory.generateSecret(はDESKeySpecを); / ** *実用的な暗号を解く鍵 * / //暗号オブジェクトを作成し 、暗号暗号=暗号.getInstance( "DES / ECB / PKCS5Padding"変換); //暗号初期化 cipher.init(Cipher.ENCRYPT_MODE、秘密鍵)。 バイト[]データ= src.getBytes()。 //加密 バイト[]はEncryptedData = cipher.doFinal(データ)。 } 公共の静的な無効メイン(文字列[]引数)を持つNoSuchAlgorithmException、IllegalBlockSizeException、NoSuchPaddingException、BadPaddingException、InvalidKeySpecException指定、例外:InvalidKeyException、IOExceptionがスロー{ //バイト[]のSecretKey = initSecretKey()。 //或者代码中约定キー 文字列のキー= "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4"。 バイト[]秘密鍵=新しいBASE64Decoder()decodeBuffer(キー)。 文字列str = "ABC"; バイト[]はEncryptedData =暗号化(秘密鍵、STR)。 ストリングdecrypteData =解読(秘密鍵、はEncryptedData)。 } 復号化静的ストリングpublic(バイト[]キー、バイト[]はEncryptedData)は例外:InvalidKeyException、持つNoSuchAlgorithmException、InvalidKeySpecException指定、NoSuchPaddingException、BadPaddingException、IllegalBlockSizeExceptionをスロー{ //初期化キーJDK DES変換キー はDESKeySpecはDESKeySpec =新しい新しいはDESKeySpec(キー) を作成//植物キーの例 ;するSecretKeyFactoryするSecretKeyFactory = SecretKeyFactory.getInstance( "DES") //生成した秘密鍵 秘密鍵秘密鍵= SecretKeyFactory.generateSecret(はDESKeySpec); / ** *解読練習暗号 * / //作成するCipherオブジェクト cipher.init(Cipher.DECRYPT_MODE、秘密鍵); //暗号化 暗号暗号= Cipher.getInstance( "DES / ECB / PKCS5Padding"変換)します。 //初始化暗号 バイト[] dencryptedData = cipher.doFinal(はEncryptedData)。 (dencryptedData)新しいStringを返します。 } }
- CBC
ECB差、暗号化と復号化には、初期化ベクトルを使用し、一貫性のある初期化ベクトルなければなりません
sun.misc.BASE64Decoderインポート; javax.cryptoのインポート* ;. インポートjavax.crypto.spec.DESKeySpec; インポートjavax.crypto.spec.IvParameterSpec; インポートにjava.io.IOException; インポートjava.security.InvalidAlgorithmParameterException; インポートjava.security .InvalidKeyException; インポートjava.security.Key; インポートjava.security.NoSuchAlgorithmException; インポートjava.security.spec.InvalidKeySpecException; publicクラス暗号{ パブリック静的バイト[] initSecretKey()が持つNoSuchAlgorithmException {スロー //指定秘密鍵アルゴリズム発生 するKeyGeneratorを= KeyGenerator.getInstanceキログラム(「DES」); //秘密鍵生成器を初期化し、秘密鍵をサイズ有することが決定され kg.init(56)。 //は、秘密鍵を生成します SecretKey = kg.generateKey AのSecretKey(); 戻りsecretkey.getEncoded(); } パブリック静的バイト[]暗号化(バイト[]キー、SRC文字列、バイト[] keyIv)は例外:InvalidKeyException、持つNoSuchAlgorithmException、InvalidKeySpecException指定、NoSuchPaddingException、BadPaddingException、{IllegalBlockSizeExceptionをスロー // JDK初期鍵、秘密鍵の変換デ はDESKeySpecはDESKeySpecが新しい新はDESKeySpec(キー)=; //キーを作成するファクトリインスタンス するSecretKeyFactoryするSecretKeyFactory = SecretKeyFactory.getInstance( "DES"); //プライベート鍵 秘密鍵秘密鍵= secretKeyFactory.generateSecret( DESKeySpec); / ** *暗号練習暗号 * / //暗号オブジェクトを作成します 暗号暗号= Cipher.getInstance( "DES / CBC / PKCS5Padding"変換)。 //创建初始化向量 IvParameterSpecのIV =新しいIvParameterSpec(keyIv)。 //初始化暗号 cipher.init(Cipher.ENCRYPT_MODE、秘密鍵、IV)。 バイト[]データ= src.getBytes()。 //加密 バイト[]はEncryptedData = cipher.doFinal(データ)。 } 公共の静的な無効メイン(文字列[]引数)を持つNoSuchAlgorithmException、IllegalBlockSizeException、NoSuchPaddingException、BadPaddingException、InvalidKeySpecException指定、例外:InvalidKeyExceptionは、IOException、InvalidAlgorithmParameterExceptionがをスロー{ //バイト[]のSecretKey = initSecretKey()。 //或者代码中约定キー 文字列のキー=「YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4」。 バイト[]秘密鍵=新しいBASE64Decoder()decodeBuffer(キー)。 バイト[] IV = {1、2、3、4、5、6、7、8}。 文字列str = "ABC"; バイト[]はEncryptedData =暗号化(秘密鍵、STR、IV)。 ストリングdecrypteData =解読(秘密鍵、はEncryptedData、IV)。 } パブリック静的文字列解読(バイト[]キー、バイト[]はEncryptedDataは、バイト[] keyIv)スロー例外:InvalidKeyException、持つNoSuchAlgorithmException、InvalidKeySpecException指定、NoSuchPaddingException、BadPaddingException、IllegalBlockSizeException、InvalidAlgorithmParameterExceptionが{ // JDK初始化秘钥转化デ秘钥 はDESKeySpecはDESKeySpec =新しいですDESKeySpec(キー); //创建秘钥工厂实例 するSecretKeyFactoryするSecretKeyFactory = SecretKeyFactory.getInstance( "DES")。 //生成秘钥 SecretKey = SecretKeyFactory.generateSecret AのSecretKey(はDESKeySpec); / ** *解読練習暗号 * / //暗号オブジェクトを作成 暗号暗号= Cipher.getInstance( "DES / CBC / PKCS5Padding"変換); //初期化ベクトル作成 IvParameterSpec IVを=新しいですIvParameterSpec(keyIv); //暗号初期化 cipher.initを(Cipher.DECRYPT_MODE、秘密鍵、IV); //暗号化された バイト[] = dencryptedData Cipher.doFinal(はEncryptedData); 新しい新しい文字列を返す(dencryptedData); } }
同じ動作モードと塗りつぶしモード、暗号化と復号に似DESおよび3DESは違います。
- JDKの初期化キー、変換キーデ
OF:
DESKeySpecはDESKeySpecは、新しいはDESKeySpec(キー)を=。
3DES:
DESedeKeySpecスペック=新しいDESedeKeySpec(キー);
- 秘密鍵ファクトリのインスタンスを作成します。
OF:
するSecretKeyFactoryするSecretKeyFactory = SecretKeyFactory.getInstance( "DES")。
3DES:
するSecretKeyFactoryするKeyFactory = SecretKeyFactory.getInstance( "DESEDE")。