博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nodejs与Java通用AES加解密
阅读量:5329 次
发布时间:2019-06-14

本文共 2914 字,大约阅读时间需要 9 分钟。

一、nodejs加解密工具类:

/*** AES util*/const CryptoJS = require('crypto-js')export const AES = {    //加密    encode: (params) => {        let { data, param, key } = params        let result = JSON.parse(JSON.stringify(data))        param.forEach(ele => {            let data = result[ele]            key = CryptoJS.enc.Utf8.parse(key)            let iv = key            let encrypted = CryptoJS.AES.encrypt(data,key,{                iv: iv,                mode: CryptoJS.mode.CBC,                padding: CryptoJS.pad.ZeroPadding            })            result[ele] = encrypted.toString();       })       return result    },    decode: (params) => {        let { data, param, key } = params        let result = JSON.parse(JSON.stringify(data))        param.forEach(ele => {            let data = result[ele]            key = CryptoJS.enc.Utf8.parse(key)            let iv = key            let decrypt = CryptoJS.AES.decrypt(data, key, {                iv: iv,                mode: CryptoJS.mode.CBC,                padding: CryptoJS.pad.ZeroPadding            });            let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);            result[ele] = decryptedStr.toString();        })        return result    }}
  • 使用方法:
    (1)加密:
let user = AES.encode({    data: {//要加密的数据        username:'123456',        password:'123456'    },    key: '1234567887654321',//加密的key    param: ['password']//要加密哪些属性})

(2)解密:

let user = AES.decode({    data: {//要解密的数据        username:'123456',        password:'lBTqrKS0kZixOFXeZ0HRng=='    },    key: '1234567887654321',    param: ['user']//要解密哪些属性})

二、Java解密:

private static String decryptAES(String data, String pass) throws Exception {    Cipher cipher = Cipher.getInstance("AES/CBC/NOPadding");    SecretKeySpec keyspec = new SecretKeySpec(pass.getBytes(), KEY_ALGORITHM);    IvParameterSpec ivspec = new IvParameterSpec(pass.getBytes());    cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);    byte[] result=cipher.doFinal(Base64.decode(data.getBytes(CharsetUtil.UTF_8)));    return new String(result, CharsetUtil.UTF_8);}
  • 使用方法:
try {    String s = decryptAES("lBTqrKS0kZixOFXeZ0HRng==", "1234567887654321");    System.out.println(s);} catch (Exception e) {    e.printStackTrace();}

三、Java加密:

private static String encryptAES(String data,String pass) throws Exception {    byte[] raw = pass.getBytes("utf-8");    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");    IvParameterSpec iv = new IvParameterSpec(pass.getBytes());    cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);    byte[] encrypted = cipher.doFinal(data.getBytes());    return new Base64().encode(encrypted);}
  • 使用方法:
String e=encryptAES("123456","1234567887654321");System.out.println(e);

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

转载于:https://www.cnblogs.com/unuai/p/cd8ff80ca06154bbed19e16d1c800283.html

你可能感兴趣的文章
FastReport.Net使用:[18]形状(Shape)控件用法
查看>>
maven常用命令
查看>>
西安游记(钟楼 -- 回民街 -- 西安古城墙)
查看>>
Java异步NIO框架Netty实现高性能高并发
查看>>
2014百度之星第一题Energy Conversion
查看>>
【机器学习】机器学习界大牛林达华推荐的书籍
查看>>
-webkit-box 高度自动填满
查看>>
已知二叉树先序和中序,求后序。
查看>>
使用py 和flask 实现的服务器系统目录浏览,日志文件实时显示到网页的功能
查看>>
mysql
查看>>
iOS 查询数组中的对象
查看>>
mysql 开启用户远程登录
查看>>
Host is not allowed to connect to this MySQL server解决方法
查看>>
leetcode 最大子矩阵(5星推荐)
查看>>
leetcode Rotate List
查看>>
Python 调用C++
查看>>
C++ int与string的转化
查看>>
链表:从尾到头打印链表
查看>>
java控制台输入输出
查看>>
【UOJ】#37. 【清华集训2014】主旋律
查看>>