import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Random;
 * @author alderaan
public class AES32CBCNoPadding {
    public static byte[] IV="0000000000000000".getBytes();
    public static final String KEY_ALGORITHM = "AES";
    public static final String CIPHER_ALGORITHM_CBC = "AES/CBC/NoPadding";
    public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC);
        int blockSize = cipher.getBlockSize();
        int length = data.length;
        // 计算需填充长度
        if (length % blockSize != 0) {
            length = length + (blockSize - (length % blockSize));
        byte[] plaintext = new byte[length];
        // 拷贝数据
        System.arraycopy(data, 0, plaintext, 0, data.length);
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(autoKey(key), KEY_ALGORITHM), new IvParameterSpec(IV));
        return cipher.doFinal(plaintext);
    public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC);
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(autoKey(key), KEY_ALGORITHM), new IvParameterSpec(IV));
        return cipher.doFinal(data);
    private static byte[] autoKey(byte[] key){
        byte[] bytes = new byte[32];
        for (int i =0;i<32;i++){
            bytes[i]=0;
        if (key.length>=32){
            System.arraycopy(key,0,bytes,0,32);
        }else {
            System.arraycopy(key,0,bytes,0,key.length);
        return bytes;
    public static String randomKey(int len){
        StringBuilder stringBuilder = new StringBuilder();
        Random random = new Random();
        for (int i =0;i<len;i++){
            stringBuilder.append(String.valueOf((char)(random.nextInt(94)+32)));
        return stringBuilder.toString();
    public static void main(String[] argv){
    	// 随机一个key 长度指定为3
    	String key = randomKey(3);
    	try {
    		// 对字符串123进行加密
			byte[] temp = encrypt("plaintext...".getBytes(),key.getBytes());
			// 解密并输出解密后的结果
			System.out.println(new String(decrypt(temp,key.getBytes())));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
                                    https://blog.csdn.net/u010660575/article/details/76672402
建议参考上面的文档,如果代码还不跑不通,强烈建议下载我的资源包。
请阅读压缩包里面的readMe.txt文档,
import javax.crypto.spec.SecretKeySpec;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class Encrypt ...
好像jdk1.8.0_162及以后是不需要替换的。
    public String encryyptstr(byte[] iv,String key,String text){
        String algorithm = "AES";
        String transform = "AES/CBC/PKCS5Padding";//
        Cipher cipher = null;
        String result =
                                    对称加密算法就是传统的用一个密码进行加密和解密。例如,我们常用的WinZIP和WinRAR对压缩包的加密和解密,就是使用对称加密算法:
从程序的角度看,所谓加密,就是这样一个函数,它接收密码和明文,然后输出密文:
secret = encrypt(key, message);
而解密则相反,它接收密码和密文,然后输出明文:
plain = decrypt(key, secret);
在软件开发中,常用的对称加密算法有:
密钥长度直接决定加密强度,而工作模式和填充模式可以看成是对称加密算法的参数和格式
                                    在之前我们在openssl上和ios上分别测试了 AES256cbc模式的加密和解密今天用java提供的api来测试一下;进而确定一下在PC,iOS,安卓上三个平台下的加密解密数据;1. 首先通过查询资料了解到:java的jdk 不支持256AES密钥,需要安装扩展包,以下会提到java 中默认不支持PKCS7 填充方式,支持PKCS5,经测试PKCS5和pkcs7没多大区别(在多平台数据互测...
                                    AES256加解密java语言实现写在前面基于项目安全性需要,有时候我们的项目会使用AES 256加解密算法。以下,是针对实现AES256 Padding7加密算法实现的关键步骤解析以及此过程遇到的一些问题总结。一些概念对称加密算法加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合;缺点是密钥的传输比较麻烦。非对称加密算法加密和解密用的密钥是不同的,这种加密方式是用数...
                                    我需要用AES CBC 256加密Java中的一个值,但是我不能在NodeJS解密它:使用以下代码生成环化字符串:SecretKeySpec secretKey = new SecretKeySpec(key, "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(Cipher.ENCRYPT_M...
                                    首先要注意一点,默认的JDK是不支持256位加密的,需要到Oracle官网下载加密增强文件(Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8),否则编译会报错:
java.security.InvalidKeyException: Illegal key size
解压后替换...
                                    答:在Artjom B的帮助下,我创建了将解密AES-256 / CBC / ZeroBytePadding加密字符串的代码。  我将其发布给需要帮助的其他人。1.首先,您必须为您的JDK版本下载Java密码学扩展(JCE)无限强度管辖权策略。2.解压缩zip文件,并将local_policy.jar和US_export_policy.jar放在/ JDK路径/ jre / lib / secur...
let key = '9815c9e69268bc2fc2085c1lc6q75a42';
let charset = 'utf8';
let cipherEncoding = 'base64';
let iv = '9183296589LSCQEG'.
public class AESUtil {
    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/NoPadding";// 默认的加密算法
     * AES 加密操作
     * @param content 待加密内容
                                    JCE是JAVA中关于加密方面的标准。来熟悉一个例子://byte[] key//byte[] iv//byte[] dataCipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keyspec = new SecretKeySpec(key, "AES");IvParameterSpec ivspec =...