java js aes 简书_nodejs中aes-128-cbc加密和解密

和java程序进行交互的时候,java那边使用AES 128位填充模式:AES/CBC/PKCS5Padding加密方法,在nodejs中采用对应的aes-128-cbc加密方法就能对应上,因为有使用向量(iv),所以nodejs中要用createCipheriv方法,而不是createCipher。

在这类加密和解密的计算中,最最要注意的就是中文编码问题,不然铁定采坑。我踩完坑了,把能跑的代码发上来下,运行环境nodejs 4.4.6。

var crypto = require('crypto');

/**

* 加密方法

* @param key 加密key

* @param iv 向量

* @param data 需要加密的数据

* @returns string

*/

var encrypt = function (key, iv, data) {

var cipher = crypto.createCipheriv('aes-128-cbc', key, iv);

var crypted = cipher.update(data, 'utf8', 'binary');

crypted += cipher.final('binary');

crypted = new Buffer(crypted, 'binary').toString('base64');

return crypted;

};

/**

* 解密方法

* @param key 解密的key

* @param iv 向量

* @param crypted 密文

* @returns string

*/

var decrypt = function (key, iv, crypted) {

crypted = new Buffer(crypted, 'base64').toString('binary');

var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);

var decoded = decipher.update(crypted, 'binary', 'utf8');

decoded += decipher.final('utf8');

return decoded;

};

var key = '751f621ea5c8f930';

console.log('加密的key:', key.toString('hex'));

var iv = '2624750004598718';

console.log('加密的iv:', iv);

var data = "Hello, nodejs. 演示aes-128-cbc加密和解密";

console.log("需要加密的数据:", data);

var crypted = encrypt(key, iv, data);

console.log("数据加密后:", crypted);

var dec = decrypt(key, iv, crypted);

console.log("数据解密后:", dec);

运行输出结果:

加密的key: 751f621ea5c8f930

加密的iv: 2624750004598718

需要加密的数据: Hello, nodejs. 演示aes-128-cbc加密和解密

数据加密后: 7L/q8ZzHLaNI1ToA/RA9b/eznGIYtO9dhTqoo105bNtsTo/QOoCTyljNy6DvU1X+

数据解密后: Hello, nodejs. 演示aes-128-cbc加密和解密

原文:http://www.01happy.com/nodejs-aes-128-cbc/

C#.NET中对称和非对称加密、解密方法汇总--亲测可用

C#.NET中对称和非对称加密.解密方法汇总--亲测可用   在安全性要求比较高的系统中都会涉及到数据的加密.解密..NET为我们封装了常用的加密算法,例如:MD5,DES,RSA等.有可逆加密,也有 ...

AES中ECB模式的加密与解密(Python3.7)

本文主要解决的问题 本文主要是讲解AES加密算法中的ECB模式的加密解密的Python3.7实现.具体AES加密算法的原理这里不做过多介绍,想了解的可以参考文末的参考链接. 主要解决了两个问题: 在P ...

对称加密----AES和DES加密、解密

目前主流的加密方式有:(对称加密)AES.DES        (非对称加密)RSA.DSA 调用AES/DES加密算法包最精要的就是下面两句话: Cipher cipher = Cipher.get ...

iOS,一行代码进行RSA、DES 、AES、MD5加密、解密

本文为投稿文章,作者:Flying_Einstein(简书) 加密的Demo,欢迎下载 JAVA端的加密解密,读者可以看我同事的这篇文章:http://www.jianshu.com/p/98569e ...

python中对RSA的加密和解密

首先,生成一对密钥,并保存 def create_keys(): # 生成公钥和私钥 (pubkey, privkey) = rsa.newkeys(1024) pub = pubkey.save_p ...

javascript 与 PHP 通信加密,使用AES 128 CBC no padding,以及ios,java,c#文章例子

运行环境 php7.0 不适用于 php7.0以上版本,因为mcrypt_encrypt()函数已删除 为何要采用 no padding 这种形式: AES加密如果原输入数据不够16字节的整数位,就要 ...

IOS 与 PHP 通信加密,使用AES 128 CBC no padding

这个网上的资料真实浩如烟海,但是真正有价值的屈指可数 自己尝试了一天多,终于还是搞定了. 再次要感谢网上的前辈么. 比如下面这个关于php和java端的实现: http://my.oschina.ne ...

在java项目中使用AES256 CBC加密

首先要注意一点,默认的JDK是不支持256位加密的,需要到Oracle官网下载加密增强文件(Java Cryptography Extension (JCE) Unlimited Strength J ...

C#中常用的字符串加密,解密方法封装,包含只加密,不解密的方法

//方法一//须添加对System.Web的引用//using System.Web.Security;/// /// SHA1加密字符串///

C#中对字符串的加密和解密

加密: /// /// 对字符串进行加密 /// /// < ...

【Zookeeper系列】ZooKeeper机制架构(转)

原文链接:https://www.cnblogs.com/sunddenly/p/4133784.html 一.ZooKeeper权限管理机制 1.1 权限管理ACL(Access Control L ...

Python 安装 lxml 插件

1.下载 lxml 地址:https://pypi.python.org/pypi/lxml/3.8.0#downloads 我用的是python 3.6,我下载了  lxml-3.8.0-cp36- ...

std&colon;&colon;move 移动对象资源

场景: C++ 标准库使用比如vector::push_back 等这类函数时,会对参数的对象进行复制,连数据也会复制.这就会造成对象内存的额外创建, 本来原意是想把参数push_back进去就行了. ...

centos7 打造基于python语言Selenium2自动化开发环境

1. 准备 安装模块 # yum groupinstall "Development tools" # yum install zlib-devel bzip2-devel ope ...

文件触发式实时同步 Rsync&plus;Sersync Rsync&plus;Inotify-tools

一.概述 1.Rsync+Sersync 是什么? 1)Sersync使用c++编写基于inotify开发的触发机制: 2)Sersync可以监控所监听的目录发生的变化(包括新建.修改.删除),具体到 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值