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",
keyword = "This is the key",
encrepted = aesEncrept(data, keyword),
decrepted = aesDecrept(encrepted, keyword);

console.log( "原始数据:" + data );
console.log( "经过AES加密后:" + encrepted );
console.log( "经过相应的解密后:" + decrepted );

注:

1.update方法只能对源数据或加密数据的前16位进行加密或解密

2.final方法就是解决上面的缺陷,可以对剩余的数据进行加密

所以才有了下面的这个写法:

  let decrypted = decipher.update(encrepted, "hex", "utf8");
  decrypted += decipher.final("utf-8");

目的就是为了对全部的数据进行加密或解密

拓展阅读:AES加密算法的详细介绍与实现

        来源:CSDN

        作者:TimeShatter

原文地址:https://www.cnblogs.com/hros/p/10997019.html

时间: 2024-08-28 03:53:51

Node.js 内置模块crypto加密模块(2) AES的相关文章

Node.js 内置模块crypto加密模块(3) HMAC

HMAC:哈希消息认证码 ( Hash-based Message Authentication Code ) HMAC是密钥相关的哈希算法 使用 HMAC 进行加密的Node实现的一种方法: "use strict"; const crypto = require("crypto");//实例化一个hmac对象,使用md5进行加密,加密密钥是secret-key const hmac = crypto.createHmac("md5", &qu

Node.js 内置模块crypto加密模块(1)md5和shax

MD5:消息摘要算法(Message-Digest Algorithm) SHA家族:安全散列算法( Secure Hash Algorithm ) 1.首先看一个简单的加密 "use strict"; //引入crypto模块const crypto = require("crypto"); //创建一个使用md5加密的hash对象,也可以使用sha1.sha256.sha512加密let hash = crypto.createHash("md5&qu

Node.js 内置模块fs的readdir方法 查看某个文件夹里面包含的文件内容

fs.readdir(path[, options], callback) 例: "use strict";const fs = require("fs");const path = require("path"); //获取当前文件所在的绝对路径let filepath = path.resolve();fs.readdir(filepath, "utf-8", function(err, files){ if(err) {

记一次在node.js中使用crypto的createCipheriv方法进行加密时所遇到的坑

Node.js的crypto模块提供了一组包括对OpenSSL的哈希.HMAC.加密.解密.签名,以及验证等一整套功能的封装.具体的使用方法可以参考这篇文章中的描述:node.js_crypto模块. 本文重点介绍在使用createCipheriv方法时所遇到的坑.对应的解密算法createDecipheriv应该是一样的问题. 按照文档中的描述,createCipheriv方法接受三个参数:algorithm用于指定加密算法,如aes-128-ecb.aes-128-cbc等:key是用于加密

Node.js开发入门—HTTP文件服务器

HelloWorld示例只有演示意义,这次我们来搞一个实际的例子:文件服务器.我们使用Node.js创建一个HTTP协议的文件服务器,你可以使用浏览器或其它下载工具到文件服务器上下载文件. 用Node.js实现的HTTP文件服务器,比我在Qt网络编程实战之HTTP服务器视频课程里用Qt实现的版本,复杂度要小太多太多了. 为了读取文件,我们会用到File System模块(名字是"fs"),Stream,我们还要分析URL,区别HTTP方法,还会用到EventEmitter. 文件服务器

Node.js区块链开发 随笔

本书主要讲述了区块链的基础一集js开发工程师如何开发区块链,不仅仅是互联网思维,调用api文档进行开发,而是在基础之上进行的拓展式的开发. 本书主要讲述了,加密货币的一些特征,以及node.js的基础,服务启动如何与链进行交互,以及node.js在区块链技术领域的调查描述,并进行了案例示范,其次对源码进行解读.从架构设计的角度,层层剖析区块链的设计原理,深刻解读相关概念和技术.从项目设计的角度谋篇,从项目入口程序出发,介绍了亿书项目的整体结构,分别介绍了P2P网络.加密解密.签名和多重签名.区块

node.js入门学习(四)--Demo模块化改造

1.node.js中模块的分类 1)node.js内置模块(核心,原生) 所有内置模块在安装node.js时就已经编译成二进制文件,可以直接加载运行(速度较快),部分内置模块,在node.exe这个进程启动时就已经默认加载了,可以直接使用. 2)文件模块 require(./common.js); // 去当前js文件的路径下找commom.js文件并导入执行.如果导入时没有指定文件后缀require(./commom),那么就按照commom.js,common.json,commom.nod

详解Node.js API系列 Crypto加密模块(1)

MD5加密算法 算法简介 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory for Computer Science和Rsa data security inc的Ronald l. rivest开发出来,经md2.md3和md4发展而来.它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数).不管是md2.md4还是md5,它们都需要

JavaScript简明教程之Node.js

Node.js是目前非常火热的技术,但是它的诞生经历却很奇特. 众所周知,在Netscape设计出JavaScript后的短短几个月,JavaScript事实上已经是前端开发的唯一标准. 后来,微软通过IE击败了Netscape后一统桌面,结果几年时间,浏览器毫无进步.(2001年推出的古老的IE 6到今天仍然有人在使用!) 没有竞争就没有发展.微软认为IE6浏览器已经非常完善,几乎没有可改进之处,然后解散了IE6开发团队!而Google却认为支持现代Web应用的新一代浏览器才刚刚起步,尤其是浏