Aes 加密解密 java加密解密
使用AES加密解密代码详解
首先,如果是使用nodejs + vue 写的前端, 那么你需要npm 加载一个js文件
npm i crypto-js --save --save-exact
npm install crypto-js
java代码加密解密类
package com.telling.util.crypto;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Aes {
private static final Log logger = LogFactory.getLog(Aes.class); // log日志
private static final String ALGORITHM = "AES/ECB/PKCS5Padding"; // "算法/模式/补码方式"
/*****************************************************
* AES加密
*
* @param content
* 加密内容
* @param key
* 加密密码,由字母或数字组成 此方法使用AES-128-ECB加密模式,key需要为16位
* 加密解密key必须相同,如:abcd1234abcd1234
* @return 加密密文
****************************************************/
public static String enCode(String content, String key) {
if (key == null || "".equals(key)) {
logger.info("key为空!");
return null;
}
if (key.length() != 16) {
logger.info("key长度不是16位!");
return null;
}
try {
byte[] raw = key.getBytes(); // 获得密码的字节数组
SecretKeySpec skey = new SecretKeySpec(raw, "AES"); // 根据密码生成AES密钥
Cipher cipher = Cipher.getInstance(ALGORITHM); // 根据指定算法ALGORITHM自成密码器
cipher.init(Cipher.ENCRYPT_MODE, skey); // 初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥
byte[] byte_content = content.getBytes("utf-8"); // 获取加密内容的字节数组(设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
byte[] encode_content = cipher.doFinal(byte_content); // 密码器加密数据
return Base64.encodeBase64String(encode_content); // 将加密后的数据转换为字符串返回
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/*****************************************************
* AES解密
*
* @param content
* 加密密文
* @param key
* 加密密码,由字母或数字组成 此方法使用AES-128-ECB加密模式,key需要为16位 加密解密key必须相同
* @return 解密明文
****************************************************/
public static String deCode(String content, String key) {
if (key == null || "".equals(key)) {
logger.info("key为空!");
return null;
}
if (key.length() != 16) {
logger.info("key长度不是16位!");
return null;
}
try {
byte[] raw = key.getBytes(); // 获得密码的字节数组
SecretKeySpec skey = new SecretKeySpec(raw, "AES"); // 根据密码生成AES密钥
Cipher cipher = Cipher.getInstance(ALGORITHM); // 根据指定算法ALGORITHM自成密码器
cipher.init(Cipher.DECRYPT_MODE, skey); // 初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥
byte[] encode_content = Base64.decodeBase64(content); // 把密文字符串转回密文字节数组
byte[] byte_content = cipher.doFinal(encode_content); // 密码器解密数据
return new String(byte_content, "utf-8"); // 将解密后的数据转换为字符串返回
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/*****************************************************
* AES加密解密测试
*
* @param args
* @return
****************************************************/
public static void main(String[] args) {
String content = "加密解密测试";
logger.info("加密content:" + content);
String key = "abcd1234abcd1234";
logger.info("加密key:" + key);
String enResult = enCode(content, key);
logger.info("加密result:" + enResult);
String deResult = deCode(enResult, key);
logger.info("解密result:" + deResult);
}
}
java类中加密解密使用方式
@ResponseBody
@RequestMapping("/getqingHou")
public String getqingHou(HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
Map map = this.getParameterMap(request);
Map retuData = new HashMap<>(16);
map.put("role", "admin");
/*****************前端传过来的加密值,进行解密*********************************************************/
String keyC = map.get("keyC").toString();
String contC = map.get("contentC").toString();
System.out.println(keyC + " : " + contC);
String decC = new String(Aes.deCode(contC, keyC));
System.out.println("前端传进来的数据: 解密后----》》》 " + decC);
System.out.println("------------------------------------------------------------------");
/**************************加密字符串,解密字符串****************************************************/
// 1234567890ABCDEF1234567890ABCDEf
String key = UUID.randomUUID().toString().replace("-", "").toUpperCase().toString().substring(0,14) + "==";
String src = "Ejian111234";
System.out.println("key---->>>> "+key);
// 加密字符串
String enc = Aes.enCode(src, key);
System.out.println("加密后---》》》 " + enc);
// 解密后
String dec = new String(Aes.deCode(enc, key));
System.out.println("解密后----》》》 " + dec);
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
/***************************加密数组,传到前端进行解密***************************************************/
String mapEnc = Aes.enCode(JSON.toJSONString(map), key);
System.out.println("集合类型加密后的数据: " + mapEnc);
retuData.put("enc", enc);
retuData.put("key", key);
retuData.put("map", mapEnc);
logger.info("+++++++get user info !" + retuData);
return JSON.toJSONString(retuData);
} catch (LoginException e) {
logger.error(e.getMessage());
return e.getErrorCode() + "_" + e.getMessage();
}
}
js代码加密解密方法
const CryptoJS = require("crypto-js")
/*****************************************************
* AES加密
* @param content 加密内容
* @param key 加密密码,由字母或数字组成
此方法使用AES-128-ECB加密模式,key需要为16位
加密解密key必须相同,如:abcd1234abcd1234
* @return 加密密文
****************************************************/
export function encrypt(content, key) {
const sKey = CryptoJS.enc.Utf8.parse(key);
const sContent = CryptoJS.enc.Utf8.parse(content);
const encrypted = CryptoJS.AES.encrypt(sContent, sKey, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
return encrypted.toString();
}
/*****************************************************
* AES解密
* @param content 加密密文
* @param key 加密密码,由字母或数字组成
此方法使用AES-128-ECB加密模式,key需要为16位
加密解密key必须相同,如:abcd1234abcd1234
* @return 解密明文
****************************************************/
export function decrypt(content, key) {
const sKey = CryptoJS.enc.Utf8.parse(key);
const decrypt = CryptoJS.AES.decrypt(content, sKey, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
前端加密解密使用方法
<script>
import { getqingHou } from "api/test.js";
import { decrypt, encrypt } from "api/cryptoAes.js"
var CryptoJS = require("crypto-js")
export default {
name: "login",
created() {
this.getqingHouFun()
},
methods: {
getqingHouFun() {
console.log('============test===start===========')
getqingHou({test: 'test', keyC: '1234567890ABCDEF', contentC: encrypt('Ejian111234567890', '1234567890ABCDEF')}).then(response => {
console.log(response.data)
console.log('=====================aes===================')
// npm i crypto-js --save --save-exact
// npm install crypto-js
var decrypt1 = decrypt(response.data.enc, response.data.key);
console.log("后端解密后的数据: ---字符串类型>>> " + decrypt1)
var decrypt2 = decrypt(response.data.map, response.data.key);
console.log("后端解密后的数据:---集合类型>>> " + decrypt2)
var json = JSON.parse(decrypt2);
console.log("后端解密后的数据:---集合类型>>>------转JSON>>> " + json.contentC)
console.log('===========test===end===================')
})
}
}
}
</script>
好了,代码全部贴出来了, 直接copy就能用, 记得看过点赞, 发个言在走哦!
Aes 加密解密 java加密解密的更多相关文章
- js前台加密,java后台解密实现
参考资料: JS前台加密,java后台解密实现
- des加密解密——java加密,php解密
最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混 ...
- iOS 3DES加密 和 java 3DES 解密
首先进入头文件: #import <CommonCrypto/CommonDigest.h> #import <CommonCrypto/CommonCryptor.h> #i ...
- js前台加密,java后端解密
1.前台JS <script type="text/javascript"> $(function() { $(" ...
- php RSA 加密 与java加密互交,java解密
<? php class encrypt{ var $pub_key; function redPukey() { $pubKey = "MIIDhzCCAm+gAwIBAgIGASY ...
- coding++:MD5加密(JAVA加密 与 JS加密不一致问题)
要求:根据指定 字符加密 JS中的加密方法 要和 JAVA中的算法保持一致,解决如下: var rotateLeft = function (lValue, iShiftBits) { retur ...
- Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA
版权声明:本文为博主原创文章,未经博主允许不得转载. [前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及使用方法和例子 [最简单的加密] 1.简单的概念 明文:加密前的 ...
- java使用AES加密解密 AES-128-ECB加密
java使用AES加密解密 AES-128-ECB加密 import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; impo ...
- AES Java加密 C#解密 (128-ECB加密模式)
在项目中遇到这么一个问题: java端需要把一些数据AES加密后传给C#端,找了好多资料,算是解决了,分享一下: import sun.misc.BASE64Decoder; import sun.m ...
随机推荐
- 模板 - 数据结构 - ST表/SparseTable
SparseTable,俗称ST表,其功能,就是静态的RMQ(区间最值查询)问题的解决.注意传入查询的时候两个参数的合法性,或者可以进行一次全部初始化来使得越界值不产生负面影响.不过访问越界是写程序的 ...
- LeetCode之找零钱
题目:已知不同面值的钞票,求如 何用最少数量的钞票组成某个金额,求可 以使用的最少钞票数量.如果任意数量的已知面值钞票都无法组成该金额, 则返回-1. 示例: Input: coins = [1, 2 ...
- 【多线程与并发】:Java中的锁
锁的概念 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁可以防止多个线程同时访问共享资源(但有些锁可以允许多个线程并发的访问共享资源,如读写锁). 在JDK1.5之前,Java是通过sync ...
- eQTL | Expression quantitative trait loci | 表达数量性状基因座 | QTL | 数量性状位点
到底什么是eQTL? eQTL和QTL之间有什么联系?为什么说QTL比eQTL难很多? QTL和GWAS有什么关系? GTEx数据库里的eQTL数据如何利用? 说eQTL之前必须先解释QTL,QTL, ...
- Java 中如何输入
import java.util.Scanner; //键盘扫描类public class Test{public static void main(String[] args) {Scanner i ...
- idea创建类,接口,枚举等如何设置注释
进入设置: File -> Settings 依次选择: Editor -> File and Code Templates -> Files -> Class (根据需要 ...
- JS如何判断文字是全角还是半角
载自:http://www.php.cn/js-tutorial-362638.html 全角:是一种电脑字符,是指一个全角字符占用两个标准字符(或两个半角字符)的位置.全角占两个字节.半角:是指一个 ...
- 单例模式:Java单例模式的几种写法及它们的优缺点
总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...
- Flutter -------- Drawer侧滑
侧滑菜单在安卓App里面非常常见 抽屉通常与Scaffold.drawer属性一起使用.抽屉的子项通常是ListView,其第一个子项是DrawerHeader ,它显示有关当前用户的状态信息.其余的 ...
- 蒙特卡洛树搜索算法 —— github上的implement的原代码
首先在网上看到了关于蒙特卡洛搜索算法的介绍,如下: https://www.cnblogs.com/steven-yang/p/5993205.html 并从中发现了一个在GitHub上impleme ...