前言

工作中遇到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));

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

java nodejs aes_Java与Node.js利用AES加密解密出相同结果的方法示例相关推荐

  1. MySQL自带的AES加密解密比较常用的使用方法

    接手的老项目中,有些SQL使用了MySQL自带的AES加密解密,为了方便操作数据,研究了一下使用方法,在这里记录一下. 加密 update user_password set password = H ...

  2. js 使用AES 加密解密

    <script type="text/javascript"> // 首先准备一份明文和秘钥:var plaintText = '123456789'; // 明文va ...

  3. java文件边读边写_[Java教程]node.js 利用流实现读写同步,边读边写

    [Java教程]node.js 利用流实现读写同步,边读边写 0 2017-09-10 13:00:14 //10个数 10个字节,每次读4b,写1blet fs=require("fs&q ...

  4. AES加密解密(java、web、app)

    AES加密解密(java.web.app) AES加密解密(java.web.app) java端 Web端 ios端 AES加密解密(java.web.app) java端 package com. ...

  5. Node.js的环境搭建方法和 npm 的使用方法

    Node.js的环境搭建方法和 npm 的使用方法 Node.js 环境的搭建 Node.js 介绍 Node.js 下载 配置Node.js node.js 测试 npm(包管理器)使用方法 npm ...

  6. aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...

    原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...

  7. java php aes加密解密_php aes 加密解密可与java对接

    php aes 加密解密可与java对接 博主:liu1693 发表时间:2017-02-23 16:52:27 浏览量:100 class Encrypt{ //加密方法 public static ...

  8. AES加密解密算法Java实现

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

  9. 128位java_求一个java算法,用128位密钥的AES加密128位明文,得出的密文还是128位...很着急,非常感谢各位大神,求救!...

    求一个java算法,用128位密钥的AES加密128位明文,得出的密文还是128位...很着急,非常感谢各位大神,求救! 关注:157  答案:1  mip版 解决时间 2021-02-03 09:1 ...

最新文章

  1. [code]代码格式1
  2. 数学公式识别神器—Mathpix Snip
  3. 标签的属性和样式属性有什么区别
  4. 十、散列表(Hash Table)
  5. 如何终止SAP cloud connector的服务
  6. Linux ping的原理与实现
  7. IceSword偏门功能介绍
  8. 如何从需求文档中辨认客户(一)
  9. 部署thinkphp5框架的php,三、部署ThinkPHP5框架
  10. 数据导入时遭遇 ORA-01187 ORA-01110
  11. 对话机器学习大神Yoshua Bengio(下)
  12. 贝叶斯(Bayes)决策理论
  13. java计算税后工资switch语句_计算个人所得税!switch语句
  14. 三级栏目html,易优CMS 栏目页分离调用二级栏目导航和三级栏目导航
  15. 2022 电赛陕西省赛
  16. P7 | spur-suppression PLL (TCAS II-2007-08)
  17. Unreal中Interface接口的使用
  18. 全球及中国职业教育市场创新发展与投资决策建议报告2022版
  19. android团购客户端,领团网团购导航Android手机客户端获机锋网力推
  20. 《重来》与去”完美主义“

热门文章

  1. Android微信文件分享
  2. APP提交审核-App Review
  3. 有序升序数组的二分查找
  4. 刀塔霸业未能连接到服务器,刀塔霸业进不去怎么解决 进不去解决方法详解[多图]...
  5. python程序下载及安装_安装下载python的安装和配置
  6. 线上某个表带where的count(*)很慢
  7. win10添加美式键盘_WIN10系统必做的6个优化,优化完电脑性能飙升。
  8. 综合性、新颖性题目练习 (考研数学)
  9. html5 canvas 取消锯齿,HTML5 Canvas 如何取消反锯齿绘图
  10. python进行聚类分析:鸢尾花(iris)代码