MD5:消息摘要算法(Message-Digest Algorithm)

SHA家族:安全散列算法( Secure Hash Algorithm )

1.首先看一个简单的加密

"use strict";
//引入crypto模块
const crypto = require("crypto");
//创建一个使用md5加密的hash对象,也可以使用sha1、sha256、sha512加密
const hash = crypto.createHash("md5");
//添加需要加密的内容,update方法可以有多个
hash.update("这是要加密的内容。");
hash.update("This is what needs to be encrypted.");
//将使用update进行加密的内容用十六进制的方式打印出来,也可以传入latin1、base64
console.log( hash.digest("hex") );
//需要注意的是digest只能出现一次

注:

a.这里的加密使用的是 update 和 digest 方法

b.update方法可以出现多次,而且必须出现在digest方法前面

c.digest方法只能出现一次

d.使用上述这种方法每次需要加密的时候只能加密一段

2.接下来我们看一下怎么实现将一整个文件进行加密( 本质上就是使用流对文件进行加密 )

"use strict"

const crypto = require( "crypto" );

const fs = require( "fs" );

let hash = crypto.createHash( "sha512" );

//创建阅读流,将test.txt文本使用hash对象加密后输出到控制台
fs.createReadStream( "test.txt" ).pipe( hash ).pipe( process.stdout );

( 关于流模块的介绍 )

关于流的pipe方法的使用 )

3.使用Hash对象进行加密( 与方法1类似,区别是该方法需要一个readable事件 )

"use strict";

const crypto = require("crypto");
const hash = crypto.createHash("sha256");

//加密已经完成的时候执行,判断加密是否完成的标准是end方法是否执行
hash.on("readable", () => {
  //读取已经经过hash加密的内容
  let data = hash.read();
  if(data){
    console.log(data.toString("base64"));
  }
});

//需要进行加密的内容
hash.write("Some Text!");

//告诉系统加密已经完成
hash.end();

注:

1.write 方法和 end 方法可以有多个

2.end 方法必须在 write 方法之后

3.只有调用了 end 方法 监听事件 readable 才能执行

4.使用 read 方法来查看加密的内容

5.需要在 readable 事件中加data判断,否则会报错( TypeError: Cannot read property 'toString' of null )

Node.js 内置模块crypto加密模块(1) MD5 和 SHA的更多相关文章

  1. Node.js 内置模块crypto加密模块(4) Diffie Hellman

    Diffie-Hellman( DH ):密钥交换协议/算法 ( Diffie-Hellman Key Exchange/Agreement Algorithm ) 百科摘录: Diffie-Hell ...

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

    HMAC:哈希消息认证码 ( Hash-based Message Authentication Code ) HMAC是密钥相关的哈希算法 使用 HMAC 进行加密的Node实现的一种方法: &qu ...

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

    RSA加密算法 写在前面: 了解RSA算法的原理请查看下面的文章 一文搞懂 RSA 算法 来源:简书  作者:somenzz 在使用 Node 进行 RSA 加密之前我们首先需要获取RSA公共和私有密 ...

  4. Node.js 内置模块crypto加密模块(2) AES

    AES:高级加密标准 ( Advanced Encryption Standard ) AES是一种对称加密算法:加密需要密钥,且加密密钥和解密密钥相同 下面是AES加密的Node实现: " ...

  5. Node.js 内置模块crypto使用事件方法(onreadable)加密的一些问题

    javaScript代码如下: 'use strict'; const crypto = require('crypto'); //实例化一个AES加密对象 const aesEncrept = cr ...

  6. [Node.js] Gzip + crypto in stream

    We can using gzip and crypto with stream: const fs = require('fs') const zlib = require('zlib') cons ...

  7. Node.js 内置模块fs(文件系统)

    fs模块的三个常用方法 1.fs.readFile() -- 读文件 2.fs.writeFile() -- 写文件 3.fa.stat() -- 查看文件信息 fs模块不同于其它模块的地方是它有异步 ...

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

    fs.readdir(path[, options], callback) 例: "use strict"; const fs = require("fs"); ...

  9. Node.js 内置模块Stream(流)

    "流"是一种抽象的数据结构 通过使用"流"可以将一段数据分割成几段,并按顺序传输,使用"流"可以降低对系统性能的要求,减少对CPU的消耗 S ...

随机推荐

  1. Java基础教程:JDBC编程

    Java基础教程:JDBC编程 1.什么是JDBC JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC A ...

  2. mysql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated

    今天迁移django数据库的时候,跑程序的时候出现这样的错误: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY cla ...

  3. Android Weekly Notes Issue #255

    Android Weekly Issue #255 April 30th, 2017 Android Weekly Issue #255 本期内容包括: 一种在RxJava中显示loading/con ...

  4. 一次react滚动列表的实践---兼容ios安卓

    一.背景 近期项目改版,对原有的h5页面进行了重新设计,数据呈现变成了瀑布流.希望新版兼容ios和安卓两端的情况下,无限制的刷新加载数据.大致效果如下: 整个页面分4部分: 顶部导航 步数状态卡片 用 ...

  5. HttpClient_02_实现https协议

    二.参考文档 1.Java 和 HTTP 的那些事(四) HTTPS 和 证书 1. 轻松把玩HttpClient之配置ssl,采用设置信任自签名证书实现https 2.如何使用HttpClient来 ...

  6. 2018.3.1 RF module distance test part II-

    1 Test  circuit diagram 2  Test demo 3 Test record 4  Test  analysis 5 Test results and discussion E ...

  7. 局域网扫描IP

    今天有朋友去面试,被问到一个“如何扫描局域网IP”的问题(即找出局域网中当前已使用的IP),朋友回答的不好,回来问我,我首先想到的就是使用ping命令将局域网可分配的IP地址逐个遍历一遍,能ping通 ...

  8. 浅析linux 下shell命令执行和守护进程

    执行shell脚本有以下几种方式 1.相对路径方式,需先cd到脚本路径下 [root@banking tmp]# cd /tmp [root@banking tmp]# ./ceshi.sh 脚本执行 ...

  9. UNR #1 火车管理

    很简单 用一个线段树维护 1.答案 2.当前栈顶是什么时候push进来的 然后用一棵以时间为版本的可持久化线段树维护每个操作之后第一个覆盖到他的操作是哪个 就可以了 询问直接在线段树上询问,修改在两棵 ...

  10. 「UVA557」 Burger(概率

    本题征求翻译.如果你能提供翻译或者题意简述,请 提交翻译 ,感谢你的贡献. 题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 复制 3 6 10 256 输出样例# ...