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. Scipy.sparse矩阵的存储,读取和转化为稠密矩阵

    import numpy as np import scipy.sparse as sp m = sp.lil_matrix((7329,7329)) np.save(path,m) #用numpy的 ...

  2. Dubbo之生产者

    环境步骤: 安装Zookeepr启动 创建Maven项目搭建生产者和消费者 安装DubboAdmin平台,实现监控 Dubbo注册中心采用的是Zookeeper.为什么采用Zookeeper呢? Zo ...

  3. Contiki Etimer 模块

    一.Etimer概述 Etimer提供产生时间事件(timed event)的机制,当设定好的timer到期时,将会给设定etimer的process发送一个PROCESS_EVENT_TIMER 事 ...

  4. Java里的阻塞队列

    JDK7提供了7个阻塞队列,如下: ArrayBlockingQueue  : 一个数组结构组成的有界阻塞队列. LinkedBlockingQueue : 一个由链表结构组成的有界阻塞队列 . Pr ...

  5. Hadoop- 流量汇总程序之如何实现hadoop的序列化接口及代码实现

    流量汇总程序需求 统计每一个用户(手机号)锁耗费的总上行流量.下行流量.总流量. 流程剖析 阶段:map 读取一行数据,切分字段, 抽取手机号,上行流量,下行流量 context.write(手机号, ...

  6. python-unittest单元测试框架

    可以理解为是已经帮我们封装好的东东,可以完成执行用例\预期与实际结果的对比等. import unittest 封装好的单元测试框架,可以直接使用 编写的测试类的继承unittest.TestCase ...

  7. L95

    The children squealed with delight when they saw the puppy.The signal will be converted into digital ...

  8. 【LeetCode】016 3Sum Closest

    题目: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...

  9. <meta> 标记汇总

    1.  <meta name="viewport" content="width=device-width, initial-scale=1"> v ...

  10. 排名Top 16的Java实用类库

    (转载: http://www.hollischuang.com/archives/1606) github地址: https://github.com/liufeiSAP/javaStudy.git ...