Java与Node.js利用AES加密解密出相同结果的方法示例
发布时间 - 2026-01-10 23:16:26 点击率:次前言

工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下是Java与Node.js利用AES加密解密出相同结果的方法,需要的朋友们下面来一起学习学习吧。
JAVA代码如下:
package g.g;
import java.security.MessageDigest;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class AesECB {
public static final String DEFAULT_CODING = "utf-8";
/**
* 解密
* @author lmiky
* @date 2014-2-25
* @param encrypted
* @param seed
* @return
* @throws Exception
*/
private static String decrypt(String encrypted, String seed) throws Exception {
byte[] keyb = seed.getBytes(DEFAULT_CODING);
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(keyb);
SecretKeySpec skey = new SecretKeySpec(thedigest, "AES");
Cipher dcipher = Cipher.getInstance("AES");
dcipher.init(Cipher.DECRYPT_MODE, skey);
byte[] clearbyte = dcipher.doFinal(toByte(encrypted));
return new String(clearbyte);
}
/**
* 加密
* @author lmiky
* @date 2014-2-25
* @param content
* @param key
* @return
* @throws Exception
*/
public static String encrypt(String content, String key) throws Exception {
byte[] input = content.getBytes(DEFAULT_CODING);
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(key.getBytes(DEFAULT_CODING));
SecretKeySpec skc = new SecretKeySpec(thedigest, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skc);
byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
ctLength += cipher.doFinal(cipherText, ctLength);
return parseByte2HexStr(cipherText);
}
/**
* 字符串转字节数组
* @author lmiky
* @date 2014-2-25
* @param hexString
* @return
*/
private static byte[] toByte(String hexString) {
int len = hexString.length() / 2;
byte[] result = new byte[len];
for (int i = 0; i < len; i++) {
result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue();
}
return result;
}
/**
* 字节转16进制数组
* @author lmiky
* @date 2014-2-25
* @param buf
* @return
*/
private static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex);
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
System.out.println(AesECB.encrypt("fsadfsdafsdafsdafsadfsadfsadf", "1eVRiqy7b9Uv7ZMM"));
System.out.println(AesECB.decrypt("b123e2d9199598c0e3f1999dc9e723387b68e29d2b3a0d59fc7d5946c750c6b4", "1eVRiqy7b9Uv7ZMM"));
}
}
Node.js代码如下:
var crypto = require('crypto');
exports.aes_algorithm = "aes-128-ecb";
exports.aes_secrect = "1eVRiqy7b9Uv7ZMM";
exports.encrypt = function (text) {
var cipher = crypto.createCipher(this.aes_algorithm, this.aes_secrect)
var crypted = cipher.update(text, 'utf8', 'hex')
crypted += cipher.final('hex');
return crypted;
};
exports.decrypt = function (text) {
var decipher = crypto.createDecipher(this.aes_algorithm, this.aes_secrect)
var dec = decipher.update(text, 'hex', 'utf8')
dec += decipher.final('utf8');
return dec;
};
//var hw = this.encrypt("fsadfsdafsdafsdafsadfsadfsadf");
//console.log(hw);
//console.log(this.decrypt(hw));
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# nodejs
# aes加密解密
# java
# aes加密解密算法
# Node.js 数据加密传输浅析
# Node.js实现前端后端数据传输加密解密
# 客户端
# 一遍
# 朋友们
# 这篇文章
# 谢谢大家
# 加密解密
# 有疑问
# seed
# encrypted
# Exception
# private
# return
# throws
# lmiky
# date
# author
# utf
# param
# DEFAULT_CODING
# dcipher
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在云主机上快速搭建多站点网站?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
详解vue.js组件化开发实践
Laravel如何创建自定义中间件?(Middleware代码示例)
JavaScript如何实现类型判断_typeof和instanceof有什么区别
网站优化排名时,需要考虑哪些问题呢?
微信h5制作网站有哪些,免费微信H5页面制作工具?
iOS中将个别页面强制横屏其他页面竖屏
网易LOFTER官网链接 老福特网页版登录地址
Swift中switch语句区间和元组模式匹配
如何正确下载安装西数主机建站助手?
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
昵图网官网入口 昵图网素材平台官方入口
Firefox Developer Edition开发者版本入口
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何在新浪SAE免费搭建个人博客?
香港服务器如何优化才能显著提升网站加载速度?
Laravel怎么清理缓存_Laravel optimize clear命令详解
百度浏览器如何管理插件 百度浏览器插件管理方法
网站制作软件有哪些,制图软件有哪些?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
独立制作一个网站多少钱,建立网站需要花多少钱?
JS弹性运动实现方法分析
网站制作价目表怎么做,珍爱网婚介费用多少?
Android GridView 滑动条设置一直显示状态(推荐)
如何用搬瓦工VPS快速搭建个人网站?
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Mybatis 中的insertOrUpdate操作
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Linux后台任务运行方法_nohup与&使用技巧【技巧】
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
如何快速启动建站代理加盟业务?
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
音乐网站服务器如何优化API响应速度?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Laravel如何生成URL和重定向?(路由助手函数)
Bootstrap CSS布局之列表
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Python数据仓库与ETL构建实战_Airflow调度流程详解
如何用IIS7快速搭建并优化网站站点?
BootStrap整体框架之基础布局组件

