Java与Node.js利用AES加密解密出相同结果的方法示例

前言

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

总结

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

(0)

相关推荐

  • Android、iOS和Java通用的AES128加密解密示例代码

    前言 移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如android和iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输. 这篇文章给大家分享AES的加密和解密.Android和ios通用的AES加密算法.大家可以直接集成到自己的项目.服务器接口如果是用Java写的话.整个框架都完美了.如果是.NET编写的后台接口的话.得改造一下哦 IOS加密 /*加密方法*/ (NSString *)AES256EncryptWithPlainText:(NSString

  • Java实现的AES256加密解密功能示例

    本文实例讲述了Java实现的AES256加密解密功能.分享给大家供大家参考,具体如下: 一.代码 package com.handler; import java.io.UnsupportedEncodingException; import java.security.Key; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.cry

  • Java AES加密解密的简单实现方法

    废话不多说,直接上代码 package com.mstf.aes; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.BadPaddingException; import

  • java基于AES对称加密算法实现的加密与解密功能示例

    本文实例讲述了java基于AES对称加密算法实现的加密与解密功能.分享给大家供大家参考,具体如下: package com.soufun.com; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import

  • JAVA中AES对称加密和解密过程

    AES对称加密和解密代码详细介绍,供大家参考,具体内容如下 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom;

  • Java使用AES加密和解密的实例详解

    Java使用AES加密和解密的实例详解 前言: AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128.192.256,分组长度128位,算法应易于各种硬件和软件实现.1998年NIST开始AES第一轮分析.测试和征集,共产生了15个候选算法.1999年3月完成了第二轮AES2的分析.测试.2000年10月2日美国政府正式宣布选中比利时密码学家Joan Daemen 和 Vincent Rijmen 提出的一种密码算法RIJNDAEL 作为 AES. 在应用方面,尽管DES在安全上

  • java使用Hex编码解码实现Aes加密解密功能示例

    本文实例讲述了java使用Hex编码解码实现Aes加密解密功能.分享给大家供大家参考,具体如下: 这里的Aes加密解密方法使用Hex进行了编码解码 package com.baidu.wallet.bdwallet.utils; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; i

  • Java与Node.js利用AES加密解密出相同结果的方法示例

    前言 工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下是Java与Node.js利用AES加密解密出相同结果的方法,需要的朋友们下面来一起学习学习吧. JAVA代码如下: package g.g; import java.security.MessageDigest; import javax.crypto.Cipher; import javax.c

  • Node.js利用debug模块打印出调试日志的方法

    前言 大家都知道在node程序开发中时,经常需要打印调试日志.用的比较多的是debug模块,比如express框架中就用到了.下文简单举几个例子进行说明.文中相关代码示例,可在这里找到. 备注:node在0.11.3版本也加入了util.debuglog()用于打印调试日志,使用方法跟debug模块大同小异. 基础例子 首先,安装debug模块. npm install debug 使用很简单,运行node程序时,加上DEBUG=app环境变量即可. /** * debug基础例子 */ var

  • JS实现AES加密并与PHP互通的方法分析

    本文实例讲述了JS实现AES加密并与PHP互通的方法.分享给大家供大家参考,具体如下: 有关数据加密解密问题,有很多钟加密方式: 这里我讲述下js和php实现AES互通 js加密: 首先引入这几个js文件 本站下载地址. <script type="text/JavaScript" src="/CryptoJS/aes.js"></script> <script type="text/javascript" src=

  • Node.js中AES加密和其它语言不一致问题解决办法

    例子一: 这几天被一个问题困扰着.Nodejs的AES加密和Java,C#加密出来的不一致.当然,这样就不能解密了.纠结了许久:后来还是实在不行了,看了下源代码,要不然还得继续纠结下去.网上说,通常的nodejs AES和其他语言实现不一样.好吧~~或许吧.nodejs的crypto模块. 复制代码 代码如下: var crypto = require('crypto'); var data = "156156165152165156156";    console.log('Orig

  • node.js读取Excel数据(下载图片)的方法示例

    前言 因为组织观影活动需要统计报名和收集影评,选择微信小程序"报名工具",管理员下载数据发现影评只是一个图片的URL链接,需要自己手动下载,哪里能难倒程序员? 1. 下载的Excel数据表: 2. 代码: const xlsx = require('xlsx'); const mkdirp = require('mkdirp'); const request = require('request'); const fs = require('fs'); const workbook =

  • Node.js中Koa2在控制台输出请求日志的方法示例

    前言 Koa2真的是个很轻量的框架,轻量到路由都作为了模块单独了出来,Koa2也没有日志功能,如果我们需要有一些请求的日志和时间,我们就需要引入日志中间件 下面话不多说了,来一起看看详细的介绍吧 引入时间格式化库MomentJS 安装MomentJS npm install moment --save 简单格式化时间 使用YYYY-MM-DD HH:MM:SS代表 年-月-日 时-分-秒(24小时制) console.log(Moment().format('YYYY-MM-DD HH:MM:S

  • Node.js利用console输出日志文件的方法示例

    通常我们在写Node.js程序时,都习惯使用console.log打印日志信息,但这也仅限于控制台输出,有时候我们需要将信息输出到日志文件中,实际上利用console也可以达到这个目的的,今天就来简单介绍一下. 我们首先创建如下文件: // index.js let fs = require('fs'); let options = { flags: 'a', // append模式 encoding: 'utf8', // utf8编码 }; let stdout = fs.createWri

  • java使用RSA与AES加密解密的实例代码详解

    首先了解下,什么是堆成加密,什么是非对称加密? 对称加密:加密与解密的密钥是相同的,加解密速度很快,比如AES 非对称加密:加密与解密的秘钥是不同的,速度较慢,比如RSA •先看代码(先会用在研究) 相关依赖: <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.58</versio

  • 原生js的RSA和AES加密解密算法

    本文实例为大家分享了js中RSA和AES加密解密详细代码,供大家参考,具体内容如下 <!doctype html> <html> <head> <meta charset='UTF-8'> </head> <body> <div class='test'></div> <script type="text/javascript"> function encrypt(data, k

随机推荐