Node.js 内置模块crypto加密模块(2) AES
AES:高级加密标准 ( Advanced Encryption Standard )
AES是一种对称加密算法:加密需要密钥,且加密密钥和解密密钥相同
下面是AES加密的Node实现:
"use strict"; const crypto = require("crypto"); //封装使用AES加密的方法 function aesEncrept(data, key){ //实例化一个cipher加密对象,使用aes192进行加密,key作为密钥 const cipher = crypto.createCipher("aes192",key); //使用cipher对data进行加密,源数据类型为utf-8,输出数据类型为hex let crypted = cipher.update(data, "utf-8", "hex"); crypted += cipher.final("hex"); return crypted; } //封装对应的AES解密方法 function aesDecrept(encrepted, key) { //实例化一个decipher解密对象,使用aes192进行解密,key作为密钥 const decipher = crypto.createDecipher("aes192", key); //使用decipher对encrepted进行解密,源数据类型为hex,输出数据类型为utf-8 let decrypted = decipher.update(encrepted, "hex", "utf-8"); decrypted += decipher.final("utf-8"); return decrypted; } //需要加密的数据 let data = "This is what needs to be encrepted"; //AES加密的密钥 let keyword = "This is the key"; //使用自定义的aesEncrept方法进行加密 let encrepted = aesEncrept(data, keyword); //使用自定义的aesDecrept方法对加密数据进行解密 let decrepted = aesDecrept(encrepted, keyword); console.log( "原始数据:" + data ); console.log( "经AES加密后:" + encrepted ); console.log( "经相应的解密后:" + decrepted );
注:
1.update方法只能对源数据的前16位进行加密,对加密数据的前32位进行解密;
2.final方法就是解决上面的缺陷,可以对剩余的数据进行加密/解密;
所以才有了下面的这个写法:
let decrypted = decipher.update(encrepted, "hex", "utf8");
decrypted += decipher.final("utf-8");
目的就是为了对全部的数据进行加密/解密
3.AES加密算法除了aes192
外,还有aes-128-ecb
,aes-256-cbc
等
拓展阅读:AES加密算法的详细介绍与实现
来源:CSDN
作者:TimeShatter
Node.js 内置模块crypto加密模块(2) AES的更多相关文章
- Node.js 内置模块crypto加密模块(4) Diffie Hellman
Diffie-Hellman( DH ):密钥交换协议/算法 ( Diffie-Hellman Key Exchange/Agreement Algorithm ) 百科摘录: Diffie-Hell ...
- Node.js 内置模块crypto加密模块(3) HMAC
HMAC:哈希消息认证码 ( Hash-based Message Authentication Code ) HMAC是密钥相关的哈希算法 使用 HMAC 进行加密的Node实现的一种方法: &qu ...
- Node.js 内置模块crypto加密模块(5) RSA
RSA加密算法 写在前面: 了解RSA算法的原理请查看下面的文章 一文搞懂 RSA 算法 来源:简书 作者:somenzz 在使用 Node 进行 RSA 加密之前我们首先需要获取RSA公共和私有密 ...
- Node.js 内置模块crypto加密模块(1) MD5 和 SHA
MD5:消息摘要算法(Message-Digest Algorithm) SHA家族:安全散列算法( Secure Hash Algorithm ) 1.首先看一个简单的加密 "use st ...
- Node.js 内置模块crypto使用事件方法(onreadable)加密的一些问题
javaScript代码如下: 'use strict'; const crypto = require('crypto'); //实例化一个AES加密对象 const aesEncrept = cr ...
- [Node.js] Gzip + crypto in stream
We can using gzip and crypto with stream: const fs = require('fs') const zlib = require('zlib') cons ...
- Node.js 内置模块fs(文件系统)
fs模块的三个常用方法 1.fs.readFile() -- 读文件 2.fs.writeFile() -- 写文件 3.fa.stat() -- 查看文件信息 fs模块不同于其它模块的地方是它有异步 ...
- Node.js 内置模块fs的readdir方法 查看某个文件夹里面包含的文件内容
fs.readdir(path[, options], callback) 例: "use strict"; const fs = require("fs"); ...
- Node.js 内置模块Stream(流)
"流"是一种抽象的数据结构 通过使用"流"可以将一段数据分割成几段,并按顺序传输,使用"流"可以降低对系统性能的要求,减少对CPU的消耗 S ...
随机推荐
- POJ - 1611 The Suspects 【并查集】
题目链接 http://poj.org/problem?id=1611 题意 给出 n, m 有n个人 编号为 0 - n - 1 有m组人 他们之间是有关系的 编号为 0 的人是 有嫌疑的 然后和 ...
- 笔记 jsp/ajax/js/jquery/html5/css+div->table
1. jsp 1).jsp(39,33) equal symbol expected: 这个异常是说第39行有 " '( 冒号单引号)问题 2)${map[key]} map和key换 ...
- 算法(Algorithms)第4版 练习 1.3.11
主要思路: 这个和Dijkstrad的双栈算法不太一样,后缀的计算只需要一个栈即可. 用一个栈来存数字栈即可. 遇到数字,压栈. 遇到运算法,从栈中弹出相应的数字,用该运算法计算得到结果. 再次压入栈 ...
- (4)获取servlet常用api
*五)与ServletAPI解耦 方式1 AddAction public String execute() throws Exception, IOException{ //获取请求对象reques ...
- entity framework WithRequiredDependent和WithRequiredPrincipal
A->WithRequiredDependent->B 表示 A中包含B的不为null实例 ,A是主键实体 B是外键实体 A->WithRequiredPrincipal-> ...
- [原创]Java集成PageOffice在线打开编辑word文件 - Spring Boot
开发环境:JDK1.8.Eclipse.Sping Boot + Thymeleaf框架. 一. 构建Sping Boot + Thymeleaf框架的项目(不再详述): 1. 新建一个maven p ...
- listen 61
Multiple Stresses Killed Snail Memory Stress sucks. It can affect your body and mind. Previous resea ...
- ntp服务器同步时间详细配置
部署NTP服务器进行时间同步 NTP服务端:linl_S IP:10.0.0.15 NTP客户端:lin_C IP:10.0.0.16 NTP服务概述 1.原理 NTP(Network ...
- BZOJ_1119_[POI2009]SLO_置换+贪心
BZOJ_1119_[POI2009]SLO_置换+贪心 Description 对于一个1-N的排列(ai),每次你可以交换两个数ax与ay(x<>y),代价为W(ax)+W(ay) 若 ...
- Codeplus2017 11月赛T3——基因
题目:https://www.luogu.org/problemnew/show/P4059 DP,状态应分为空格或字母,可用0和1表示,据此转移,详见代码. 另:注意初始化,因为有负值所以要先把f数 ...