注意

1. PKCS5PaddingPKCS7Padding是一样的

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加密和解密的更多相关文章

  1. 使用crypto-js对数据进行AES加密、解密

    前段时间做项目有用到数据加密,前端加密,后端解密(前端也可以解密),话不多说进入正题: 第一步: npm i crypto-js -S 第二步: 在需要加密或解密的地方引入crypto-js: imp ...

  2. Php AES加密、解密与Java互操作的问题

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  3. java与C#、.NET AES加密、解密 解决方案

      1.情景展示 Java提供的密钥,C#无法解密. 2.原因分析 在Java中,AES的实际密钥需要用到KeyGenerator 和 SecureRandom,但是C#和.NET 里面没有这2个类, ...

  4. java使用AES加密解密 AES-128-ECB加密

    java使用AES加密解密 AES-128-ECB加密 import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; impo ...

  5. Java实现AES加密,异常java.security.InvalidKeyException: Illegal key size 的解决

    Java实现AES加密,抛出异常如下:java.security.InvalidKeyException: Illegal key size 代码参考 http://my.oschina.net/Ja ...

  6. java独立小程序实现AES加密和解密

    一.需求: web项目中配置文件配置的密码是明文的, 现在需要修改成密文, 加密方式采用AES, 于是写了个工具类用于加密和解密. 又因为这个密码是由客户来最终确定, 所以为了部署时方便起见, 写了个 ...

  7. java AES加密、解密(兼容windows和linux)

      java AES加密.解密 CreationTime--2018年7月14日10点06分 Author:Marydon 1.准备工作 updateTime--2018年8月10日15点28分 up ...

  8. Java使用AES加密解密

    AES加密机制: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准. 这个标准用来替代原先的 ...

  9. Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同

    一)什么是AES? 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用. ...

随机推荐

  1. 阿里云中ssl配置(nginx安装https服务)

    1.配置 a.阿里云服务器 b.安装了nginx,php等 2.申请免费ssl证数 a. b. c.产看ssl证数 d.下载证数 e,这里我下载的是nginx(crt与key文件) f.服务器上配置 ...

  2. 详解 Redis 应用场景及应用实例

    redis(二)高级用法 详解 Redis 应用场景及应用实例 Redis 它是什么?它用来做什么?它的优势与短板如何? 告诉你Redis是一个牛逼货

  3. 19迭代模式Iterator

    一.什么是迭代模式 Iterator模式也叫迭代模式,是行为模式之 一,它把对容器中包含的内部对象的访问委让给 外部类,使用Iterator(遍历)按顺序进行遍历 访问的设计模式. 二.不使用迭代模式 ...

  4. actor 内最好不要阻塞

    1. 在使用 akka cluster singleton 时,我需要知道被创建的 singleton proxy 的 actorRef,通过绝对路径加 actorSelection 方法,应该很容易 ...

  5. git 误删分支恢复方法

    在使用Git的过程中,因为人为因素造成分支(commit)被删除,可以使用以下步骤进行恢复. 首先用以下步骤创建一个新分支,修改一些文件后删除,以便进行恢复. 1.创建分支 abc git branc ...

  6. 九、K3 WISE 开发插件《工业单据老单序时薄插件工具栏按钮开发实例》

    =============================== 目录: 1.添加工具栏按钮 2.查询被添加工具栏按钮的业务单据的FMenuID和FID 3.添加工具栏按钮和业务单据的映射关系 4.工具 ...

  7. 美团店铺评价语言处理以及分类(tfidf,SVM,决策树,随机森林,Knn,ensemble)

    第一篇 数据清洗与分析部分 第二篇 可视化部分, 第三篇 朴素贝叶斯文本分类 支持向量机分类 支持向量机 网格搜索 临近法 决策树 随机森林 bagging方法 import pandas as pd ...

  8. spring框架排错

    1.格式错误. http://www.springframework.org/schema/mvc       http://www.springframework.org/schema/mvc/sp ...

  9. YSQL获取自增ID的四种方法(转发)

    YSQL获取自增ID的四种方法(转发) 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID 是与t ...

  10. [转] - spark推荐 - 从50多分钟到3分钟的优化

    原文地址 从50多分钟到3分钟的优化 某推荐系统需要基于Spark用ALS算法对近一天的数据进行实时训练, 然后进行推荐. 输入的数据有114G, 但训练时间加上预测的时间需要50多分钟, 而业务的要 ...