- 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