Javaの暗号化と復号化アルゴリズム--des

  • 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")。

  

おすすめ

転載: www.cnblogs.com/ivy-xu/p/12297194.html