如何使用CryptoJS配合Java进行AES加密和解密
注意
1. PKCS5Padding
和PKCS7Padding是一样的
2. 加密时使用的key和iv要转换成base64格式
一、前端
1.函数
function encrypt (msg, key, iv) {
return CryptoJS.AES.encrypt(msg, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
});
} function decrypt (cipherText, key, iv) {
return CryptoJS.AES.decrypt({ ciphertext: cipherText }, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC });
}
2. 示例
var key = CryptoJS.enc.Base64.parse('ZGIyMTM5NTYxYzlmZTA2OA==');
var iv = CryptoJS.enc.Base64.parse('ZGIyMTM5NTYxYzlmZTA2OA=='); var encrypted = encrypt('Hello World', key, iv);
var cipherText = encrypted.ciphertext.toString();
//java 使用 34439a96e68b129093105b67de81c0fc
console.log(cipherText); // 拿到字符串类型的密文需要先将其用Hex方法parse一下
var cipherTextHexStr = CryptoJS.enc.Hex.parse(cipherText); // 将密文转为Base64的字符串
// 只有Base64类型的字符串密文才能对其进行解密
var cipherTextBase64Str = CryptoJS.enc.Base64.stringify(cipherTextHexStr); //下面三种解密都可以
var decrypted = CryptoJS.AES.decrypt(cipherTextBase64Str, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
}); decrypted = decrypt(CryptoJS.enc.Base64.parse(cipherTextBase64Str), key, iv);
decrypted = decrypt(cipherTextHexStr, key, iv); console.log(decrypted.toString(CryptoJS.enc.Utf8));
二、后端
1.函数
public static byte[] AES_CBC_Decrypt(byte[] data, byte[] key, byte[] iv) throws Exception{
Cipher cipher = getCipher(Cipher.DECRYPT_MODE, key, iv);
return cipher.doFinal(data);
} private static Cipher getCipher(int mode, byte[] key, byte[] iv) throws Exception{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//因为AES的加密块大小是128bit(16byte), 所以key是128、192、256bit无关
//System.out.println("cipher.getBlockSize(): " + cipher.getBlockSize());
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
cipher.init(mode, secretKeySpec, new IvParameterSpec(iv)); return cipher;
}
2.示例
//传给crypto的key、iv要使用base64格式
//ZGIyMTM5NTYxYzlmZTA2OA==
byte[] bytes = "db2139561c9fe068".getBytes();
String base64Str = Base64.encodeBase64String(bytes);
System.out.println(base64Str); String crypto = "34439a96e68b129093105b67de81c0fc";
data = Hex.decodeHex(crypto.toCharArray());
s = AES_CBC_Decrypt(data, bytes, bytes);
System.out.println(new String(s));
如何使用CryptoJS配合Java进行AES加密和解密的更多相关文章
- 使用crypto-js对数据进行AES加密、解密
前段时间做项目有用到数据加密,前端加密,后端解密(前端也可以解密),话不多说进入正题: 第一步: npm i crypto-js -S 第二步: 在需要加密或解密的地方引入crypto-js: imp ...
- Php AES加密、解密与Java互操作的问题
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- java与C#、.NET AES加密、解密 解决方案
1.情景展示 Java提供的密钥,C#无法解密. 2.原因分析 在Java中,AES的实际密钥需要用到KeyGenerator 和 SecureRandom,但是C#和.NET 里面没有这2个类, ...
- java使用AES加密解密 AES-128-ECB加密
java使用AES加密解密 AES-128-ECB加密 import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; impo ...
- Java实现AES加密,异常java.security.InvalidKeyException: Illegal key size 的解决
Java实现AES加密,抛出异常如下:java.security.InvalidKeyException: Illegal key size 代码参考 http://my.oschina.net/Ja ...
- java独立小程序实现AES加密和解密
一.需求: web项目中配置文件配置的密码是明文的, 现在需要修改成密文, 加密方式采用AES, 于是写了个工具类用于加密和解密. 又因为这个密码是由客户来最终确定, 所以为了部署时方便起见, 写了个 ...
- java AES加密、解密(兼容windows和linux)
java AES加密.解密 CreationTime--2018年7月14日10点06分 Author:Marydon 1.准备工作 updateTime--2018年8月10日15点28分 up ...
- Java使用AES加密解密
AES加密机制: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准. 这个标准用来替代原先的 ...
- Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同
一)什么是AES? 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用. ...
随机推荐
- USB学习笔记连载(二十一):CY7C68013A进行数据传输(一)
官方手册中给出了bulkloop参考例程,此例程是PC从端口2发送出数据,然后从端口6接收到数据,那么根据这个思想,可以进行修改,使得PC机接收到的数据不是从EP2发送过来的,而是从外部逻辑,比如FP ...
- Memcached 总结 启动多个Memcached服务 配置文件详解
一. 1.解压下载的安装包到指定目录. 2.服务安装,使用管理员权限运行以下命令: c:\memcached\memcached.exe -d install 二.同一台Windows机器中启动多个M ...
- PISQLDAS 查询语句
SELECT tag,CAST(value AS Float64) FROM piarchive..piavg WHERE tag = ? AND time >= DATE(?) AND tim ...
- Netbeans 8.1 检测不到Tomcat8.5.3以上版本已经启动的Bug
Tomcat实际上已经启动,但是netbeans就是检测不到,只要在server.xml中,找到http/1.1的connector 添加 属性 server="Apache-Coyote/ ...
- Github安卓开源项目编译运行
转:http://blog.csdn.net/laihuan99/article/details/9054985 很多新手朋友朋友在Github搜索开源项目时,有时候不明白怎么导入eclipse.的确 ...
- sklearn数据预处理
一.standardization 之所以标准化的原因是,如果数据集中的某个特征的取值不服从标准的正太分布,则性能就会变得很差 ①函数scale提供了快速和简单的方法在单个数组形式的数据集上来执行标准 ...
- Matlab 瑞利信道仿真
转眼间三月都已经过去一半,一直找不到有什么可以写的,一直想等自己把LTE仿真平台搭好后,再以连载的形式记录下来.但是,后来一想,我必须先做好充分的铺垫,在这过程中也遇到了很多问题,及时留下点什么,也是 ...
- linux命令之间的分号,&&, ||
在用linux命令时候, 我们经常需要同时执行多条命令, 那么命令之间该如何分割呢? 分号: 顺序地独立执行各条命令, 彼此之间不关心是否失败, 所有命令都会执行. && : 顺序执 ...
- [转]CDN(内容分发网络)技术原理
1. 前言 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加, 用户数量也在不断增加,受Web服务器的负荷和传输距离 ...
- for循环 例子
<script type="text/javascript"> //循环 for循环 //循环操作某一个功能(执行某段代码) //四要素 1.循环初始值 2.循环条件 ...