javaはPKCS 5 Padding充填方式に基づくAESの復号を実現する。
第3弾を復号し、javaはPKCS 5 Padding充填方式によるAESの復号を実現する。インターネットの共有精神に基づいて、わざわざコードをお送りします。多く言わないで、コードを見て、兄の注釈はとても詳しいです。
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class AESUtil {
/**
*
*/
private static final String KEY_ALGORITHM = "AES";
/**
* / / /
* Java 6 PKCS5Padding
* Bouncy Castle PKCS7Padding
*/
private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
/**
*
* @return
* @throws Exception
*/
public static String generateKey() throws Exception {
//
KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
/**
* AES
* AES 128 192 256 ,java AES 128
* 192 256 , oracle jdk , "Additional Resources"
* "Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files", [DOWNLOAD]
* local_policy.jar US_export_policy.jar jdk jre/lib/security/ ,
*/
kg.init(128);
//
SecretKey secretKey = kg.generateKey();
//
return Base64.encodeBase64String(secretKey.getEncoded());
}
/**
* AES
* @param source
* @param key
* @return
* @throws Exception
*/
public static String encrypt(String source, String key) throws Exception {
byte[] sourceBytes = source.getBytes("UTF-8");
byte[] keyBytes = Base64.decodeBase64(key);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, KEY_ALGORITHM));
byte[] decrypted = cipher.doFinal(sourceBytes);
return Base64.encodeBase64String(decrypted);
}
/**
* AES
* @param encryptStr
* @param key
* @return
* @throws Exception
*/
public static String decrypt(String encryptStr, String key) throws Exception {
byte[] sourceBytes = Base64.decodeBase64(encryptStr);
byte[] keyBytes = Base64.decodeBase64(key);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, KEY_ALGORITHM));
byte[] decoded = cipher.doFinal(sourceBytes);
return new String(decoded, "UTF-8");
}
}