【Java / JavaScript】AES加密解密
Java封装的AES加密解密工具类:
几个重要的参数信息
- 需要指定一个密钥串sKey 密钥内容自定义 数字 + 字母 + 特殊符号
- 加密方式为 AES
- AES下面的模式ECB
- ECB下面指定内嵌内容为PKCS5
package cn.hyite.amerp.common.util; import java.util.Base64; import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec; public class EncryptAESUtil { public static String sKey = "加密的密钥串,自定义"; public static String Encrypt(String sSrc) {
byte[] raw;
try {
raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
return Base64.getEncoder().encodeToString(encrypted);
} catch (Exception e) {
e.printStackTrace();
return null;
}
} // 解密
public static String Decrypt(String sSrc) {
try {
byte[] raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] encrypted1 = Base64.getDecoder().decode(sSrc);
try {
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
工具测试方法:
public static void main(String[] args) throws Exception {
// 需要加密的字串
String cSrc = "999999";
System.out.println(cSrc); // 加密
String enString = EncryptAESUtil.Encrypt(cSrc);
System.out.println("加密后的字串是:" + enString); // 解密
String DeString = EncryptAESUtil.Decrypt(enString);
System.out.println("解密后的字串是:" + DeString);
}
JavaScript的AES加密解密工具类:
参考博客:
https://www.cnblogs.com/herenwei-wayne/p/15832466.html
安装CryptoJS组件,先在NPM官网上找到CryptoJS的依赖地址:
https://www.npmjs.com/package/crypto-js
测试方法编写:
import Crypto from 'crypto-js' test() {
const serverKey = 'cloud9.aesde.2023'
const key = Crypto.enc.Utf8.parse(serverKey)
const iv = Crypto.enc.Utf8.parse(serverKey) // 生成密文
let encryptedData = Crypto.AES.encrypt('需要被加密的明文', key, {
iv: iv,
mode: Crypto.mode.ECB,
padding: Crypto.pad.Pkcs7
})
encryptedData = encryptedData.toString()
console.log(encryptedData) const decryptedData = Crypto.AES.decrypt(encryptedData, key, {
iv: iv,
mode: Crypto.mode.ECB,
padding: Crypto.pad.Pkcs7
}) // 解密后的明文
console.log(decryptedData.toString(Crypto.enc.Utf8))
}
测试加密的密文和Java解密能一致之后,我们开始封装方法(aes-util.js):
import Crypto from 'crypto-js' /**
* 参考:Java JavaScript AES/CBC/PKCS5Padding 加密解密
* https://www.cnblogs.com/herenwei-wayne/p/15832466.html
*
* crypto-js依赖 npm地址
* https://www.npmjs.com/package/crypto-js?activeTab=readme
*
*/
const serverKey = 'cloud9.aesde.2023' const key = Crypto.enc.Utf8.parse(serverKey)
const iv = Crypto.enc.Utf8.parse(serverKey) /**
* 使用AES的(ECB模式)(Pkcs7内嵌)算法进行加密
* @param plainText 明文
* @returns {string} 密文
*/
const encryptByEcbPkcs7 = plainText => {
const encryptedData = Crypto.AES.encrypt(plainText, key, {
iv: iv,
mode: Crypto.mode.ECB,
padding: Crypto.pad.Pkcs7
})
return encryptedData.toString()
} /**
* 使用AES的(ECB模式)(Pkcs7内嵌)算法进行解密
* @param cipherText 密文
* @returns {string} 明文
*/
const decryptByEcbPkcs7 = cipherText => {
const decryptedData = Crypto.AES.decrypt(cipherText, key, {
iv: iv,
mode: Crypto.mode.ECB,
padding: Crypto.pad.Pkcs7
})
return decryptedData.toString(Crypto.enc.Utf8)
} /**
* 按对象集中导出
*/
export {
encryptByEcbPkcs7,
decryptByEcbPkcs7
}
JS加密与Java解密:
调用时引入需要的方法:
import { encryptByEcbPkcs7 } from '@/utils/encrypt/aes-util' // 调用时方法
param.password = encryptByEcbPkcs7(param.password)
传入后台解码:
String DeString = EncryptAESUtil.Decrypt(enString);
【Java / JavaScript】AES加密解密的更多相关文章
- java使用AES加密解密 AES-128-ECB加密
java使用AES加密解密 AES-128-ECB加密 import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; impo ...
- php与java通用AES加密解密算法
AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的 ...
- [Java 实现AES加密解密]
今天同学请教我这个问题,被坑了次…… 实现的功能是2个Java类:一个读取源文件生成加密文件,另一个类读取加密文件来解密. 整个过程其实很简单,java有AES的工具包,设好秘钥,设好输入内容,就得到 ...
- 使用java进行 AES 加密 解密?
百度百科是这样定义的: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标 ...
- Java使用AES加密解密
AES加密机制: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准. 这个标准用来替代原先的 ...
- 【java】AES加密解密|及Base64的使用
转载自:http://www.cnblogs.com/arix04/archive/2009/10/15/1511839.html AES加解密算法,使用Base64做转码以及辅助加密: packag ...
- Java实现AES加密解密
之前常用两种加密算法:Base64和Md5,前者容易破解,后者不可逆. AES采用对称加密方式,破解难度非常大,在可逆的基础上,能很好的保证数据的安全性. 这里介绍Java中实现AES加密算法的加密与 ...
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...
- 前端AES加密解密
最开始使用的aes-js的npm包,后来发现npm上面那个包只能加密16个长度的字节,非16个长度的字符串就会报错,后来使用的是crypto-js, AES总共有四种加密方式,我们使用的CBC方式: ...
- AES加密解密——AES在JavaWeb项目中前台JS加密,后台Java解密的使用
一:前言 在软件开发中,经常要对数据进行传输,数据在传输的过程中可能被拦截,被监听,所以在传输数据的时候使用数据的原始内容进行传输的话,安全隐患是非常大的.因此就要对需要传输的数据进行在客户端进行加密 ...
随机推荐
- 【论文笔记】ResNet深度残差网络
[深度学习]总目录 深度残差网络(ResNet)由微软研究院的何恺明.张祥雨.任少卿.孙剑提出.研究动机是为了解决深度网络的退化问题,不同于过去的网络是通过学习去拟合一个分布,ResNet通过学习去拟 ...
- ts interface
在TypeScript中,接口(interface)用于定义对象的结构,可以描述对象的属性.方法等.下面是一个简单的例子,演示如何使用 TypeScript 接口: // 定义一个接口表示一个人的信息 ...
- vscode git bash终端配置:“”message": "此项已弃用,配置默认 shell 的新推荐方法是在 `#terminal.integrated.profiles.windows#
当VSCode升级至1.57.1(2021.6.17)时,会出现警告提示:""message": "此项已弃用,配置默认 shell 的新推荐方法是在 `#te ...
- kettle从入门到精通 第三十五课 kettle 变量
1.设置变量 a.可以通过转换中的"设置变量"步骤进行设置. b.手动通过kettle.properties文件或通过"编辑"菜单中的"设置环境变量& ...
- linux系统下,redis如何设置密码
1.命令方式 首先查看下密码是否存在,发现并未设置为空. -bash-4.2# cd /usr/local/redis-6.2.6/src -bash-4.2# ./redis-cli 127.0.0 ...
- Vue学习:22.Vue组件库-Vant
Vue组件库是一系列预先构建好的.可复用的UI组件集合,它们设计用于加速Vue.js应用程序的开发过程.这些组件通常遵循一定的设计规范,提供统一的外观和交互体验,让开发者能够快速搭建用户界面. 组件库 ...
- Web之http学习笔记
目录 HTTP url http请求 请求行 请求方法 请求头 请求正文 http响应 响应行 状态码 响应头 响应正文 Cookie 定义: 内容: 用途: 生命周期: 隐私和安全性: Sessio ...
- 架构师必知的11种API性能优化方法
前言 接口性能优化是后端开发人员经常碰到的一道面试题,因为它是一个跟开发语言无关的公共问题. 这个问题既可以很简单,也可以相当复杂. 有时候,只需要添加一个索引就能解决. 有时候,代码需要进行重构. ...
- 【读论文】CM-Gen: A Neural Framework for Chinese Metaphor Generation with Explicit Context Modelling
为了更好的阅读体验,请点击这里 由于发不出论文,所以找点冷门方向做一做.从汉语比喻开始. 读完这篇论文之后我觉得 COLING 这方向我上我也行(ε=ε=ε=┏(゜ロ゜;)┛ 题目:CM-Gen: A ...
- BufferCache的简单理解
对于磁盘和文件系统来讲 Buffer对应磁盘数据的缓存,用于读或写. Cache对应文件数据的页缓存,用于读或写. Buffer可以用来聚合多个写操作,Cache则可以理解为预读操作,文件系统通过这两 ...