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

  • ECB
*持つjavax.cryptoインポート;.に
インポートするjavax.crypto.spec.SecretKeySpec、
インポートにjava.io.IOException; 
インポートjava.security.InvalidKeyException; 
インポートjava.security.NoSuchAlgorithmException; 
インポートjava.security.spec.InvalidKeySpecException; 

publicクラスAESDecrypt { 

        静的バイトパブリック[] initSecretKey()が持つNoSuchAlgorithmException {スロー
            //指定された鍵生成アルゴリズムである
            ;のKeyGeneratorキロ= KeyGenerator.getInstance(「AES」)
            //は、鍵生成装置を初期化し、それはキーのサイズを決定しなければならない
            kg.initを(128); 
            //は、秘密鍵を生成する
            のSecretKey kg.generateKeyのSecretKey =(); 
            戻りsecretkey.getEncoded(); 
        }

        パブリック静的バイト[]暗号化(バイト[]キー、文字列srcは)例外:InvalidKeyException、持つNoSuchAlgorithmException、InvalidKeySpecException指定、NoSuchPaddingException、BadPaddingException、IllegalBlockSizeExceptionをスロー{ 
            //生成秘钥
            SecretKeySpec keySpec =新しいSecretKeySpec(キー、 "AES")。

            / ** 
             *加密实际操作するCipher 
             * / 
            //创建暗号对象
            暗号暗号= Cipher.getInstance( "AES / ECB / PKCS5Padding"変換)。
            //初始化暗号
            cipher.init(Cipher.ENCRYPT_MODE、keySpec)。
            バイト[]データ= src.getBytes()。
            //加密
            バイト[]はEncryptedData = cipher.doFinal(データ)。
            EncryptedDataを返します。
        }

        公共の静的な無効メイン(文字列[]引数)を持つNoSuchAlgorithmException、IllegalBlockSizeException、NoSuchPaddingException、BadPaddingException、InvalidKeySpecException指定、例外:InvalidKeyException、IOExceptionがスロー{ 
            //バイト[]のSecretKey = initSecretKey()。
            //或者代码中约定キー
            文字列のキー= "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4"。
            バイト[]のSecretKey = key.getBytes()。
            文字列str = "ABC"; 
            バイト[]はEncryptedData =暗号化(秘密鍵、STR)。
            ストリングdecrypteData =解読(秘密鍵、はEncryptedData)。
        }

        パブリック静的文字列解読(バイト[]キー、バイト[]はEncryptedData)は例外:InvalidKeyException、持つNoSuchAlgorithmException、InvalidKeySpecException指定、NoSuchPaddingException、BadPaddingException、IllegalBlockSizeException、例外:InvalidKeyExceptionをスロー{ 
            //生成秘钥
            SecretKeySpec keySpec =新しいSecretKeySpec(キー、 "AES")。

            / ** 
             *解密实际操作するCipher 
             * / 
            //创建暗号对象
            暗号暗号= Cipher.getInstance( "AES / ECB / PKCS5Padding"変換)。
            //初始化暗号
            cipher.init(Cipher.DECRYPT_MODE、keySpec)。
            //加密
            バイト[] dencryptedData = cipher.doFinal(はEncryptedData)。 
            リターン新しいString(dencryptedData)。
        } 

}
  • CBC 

そしてECBの違い、および初期化ベクトルを用いて充填する秘密鍵暗号化方式、および同じ初期化ベクトルの長さを持ちます。CFBは、次の例を参照することができます。

  •  CFB
*持つjavax.cryptoインポート;.に
インポートjavax.crypto.spec.IvParameterSpec; 
インポートするjavax.crypto.spec.SecretKeySpec、
インポートにjava.io.IOException; 
インポートjava.security.InvalidAlgorithmParameterException; 
インポートjava.security.InvalidKeyException、
インポートjava.security .NoSuchAlgorithmException; 
インポートjava.security.spec.InvalidKeySpecException; 

publicクラスAESDecrypt { 

        パブリック静的バイト[] initSecretKey()が持つNoSuchAlgorithmException {スロー
            //は、鍵生成アルゴリズムが指定されている
            のKeyGeneratorキロ= KeyGenerator.getInstance( "AES"); 
            //初期化秘密鍵生成、秘密鍵は、サイズ持つように決定される
            kg.init(128); 
            //は、秘密鍵を生成します
            秘密鍵のSecretKey = kg.generateKey()。
            リターンsecretkey.getEncoded(); 
        } 

        パブリック静的バイト[]暗号化(バイト[]キー、列src、バイト[] keyIv)例外:InvalidKeyException、持つNoSuchAlgorithmException、InvalidKeySpecException指定、NoSuchPaddingException、BadPaddingException、IllegalBlockSizeException、InvalidAlgorithmParameterExceptionが{スロー
            //生成秘钥
            SecretKeySpec keySpec =新しいSecretKeySpec(キー、「 AES "); 

            / ** 
             *加密实际操作するCipher 
             * / 
            //创建暗号对象 
            cipher.init(Cipher.ENCRYPT_MODE、keySpec、IV)。 
            、暗号暗号= Cipher.getInstance( "AES / CFB / PKCS5Padding"変換) ; 
            //初期化ベクトルを作成します
            IvParameterSpec IV =新しいIvParameterSpec(keyIv)。
            //初始化暗号 
            文字列のキー= "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4"。
            バイト[]のSecretKey = key.getBytes()。
            バイト[]データ= src.getBytes()。
            //加密
            バイト[]はEncryptedData = cipher.doFinal(データ)。
            EncryptedDataを返します。
        } 

        公共の静的な無効メイン(文字列[]引数)を持つNoSuchAlgorithmException、IllegalBlockSizeException、NoSuchPaddingException、BadPaddingException、InvalidKeySpecException指定、例外:InvalidKeyExceptionは、IOException、InvalidAlgorithmParameterExceptionがをスロー{ 
            //バイト[]のSecretKey = initSecretKey()。
            //或者代码中约定キー
            バイト[] IV = {1,2,3,4,5,6,7,8,9,11,10,12,13,14,15,16}。
            文字列str = "ABC"; 
            バイト[]はEncryptedData =暗号化(秘密鍵、STR、IV)。
            ストリングdecrypteData =解読(秘密鍵、はEncryptedData、IV)。
        } 

        パブリック静的文字列解読(バイト[]キー、バイト[]はEncryptedDataは、バイト[] keyIv)例外:InvalidKeyException、持つNoSuchAlgorithmException、InvalidKeySpecException指定、NoSuchPaddingException、BadPaddingException、IllegalBlockSizeException、例外:InvalidKeyException {スロー
            //生成秘钥
            」、SecretKeySpec keySpec =新しいSecretKeySpec(キーAES "); 

            / ** 
             *解密实际操作するCipher 
             * / 
            //创建暗号对象
            暗号暗号= Cipher.getInstance( "AES / CFB / PKCS5Padding"変換)。 
            //初期化ベクトルは、作成
            IvParameterSpec IV =新新IvParameterSpec(keyIvを); 
            //は、暗号の初期化
            cipher.init(暗号を。 DECRYPT_MODE、keySpec、IV); 
            //暗号化
            バイト[] dencryptedData = cipher.doFinal(はEncryptedData)。
            (dencryptedData)新しいStringを返します。
        } 

}

  

PS:192に128、またはキーの長さ限り256 1624へ、又は32等

AESは、様々なモードとAESの暗号化と復号化だけでなく、オンラインツールの組み合わせでいっぱい:https://www.jianshu.com/p/e8969d8bb6d7  

おすすめ

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