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){
String key = randomKey(3);
try {
byte[] temp = encrypt("plaintext...".getBytes(),key.getBytes());
System.out.println(new String(decrypt(temp,key.getBytes())));
} catch (Exception e) {
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上分别测试了 AES256位cbc模式的加密和解密今天用java提供的api来测试一下;进而确定一下在PC,iOS,安卓上三个平台下的加密解密数据;1. 首先通过查询资料了解到:java的jdk 不支持256位AES密钥,需要安装扩展包,以下会提到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 =...