1.数据加密与解密

主要使用了node的crypto模块的Cipher与Decipher类来加密解密,加密与解密的方法主要有以下几种:

1.1 使用Cipher与Decipher对象作为流来加密解密

// 加载 crypto 模块
const crypto = require('crypto')
// 解密密钥
const secret = '123456'
// 加密与解密算法 可用 crypto.getCiphers() 方法查看算法各类
const Algorithm = 'aes192'
// 加密
const cipher = crypto.createCipher(Algorithm, secret)
// 加密后的数据
let encryted = ''
// 订阅 readable 事件
cipher.on('readable', () => {// 使用 read 方法读取数据let data = cipher.read()if (data) {// 生成数据encryted += data.toString('hex')}
})
// 订阅 end 事件打印加密后的数据
cipher.on('end', () => {console.log(encryted)
})
// 写入加密数据
cipher.write('Hello World!', 'utf8')
cipher.end()// 解密数据
const decipher = crypto.createDecipher(Algorithm, secret)
// 解密后的数据
let decryted = ''
// 订阅readable事件读取加密数据并生成解密后的数据
decipher.on('readable', () => {let data = decipher.read()if (data) {decryted += data}
})
// 订阅 end 事件打印解密后的数据
decipher.on('end', () => {console.log(decryted)
})
// 写入要解密的数据,与设置密数据的编码
decipher.write(encryted, 'hex')
decipher.end()

1.2 使用Cipher与Decipher的update方法与final方法来加密解密

// 加载 crypto 模块
const crypto = require('crypto')
// 解密密钥
const secret = '123456'
// 加密与解密算法 可用 crypto.getCiphers() 方法查看算法各类
const Algorithm = 'aes192'
// 加密
const cipher = crypto.createCipher(Algorithm, secret)
// 更新加密数据
let crypted = cipher.update('Hello World!', 'utf8', 'hex')
// 生成加密数据
crypted += cipher.final('hex')
// 打印加密数据
console.log(crypted)// 解密
const decipher = crypto.createDecipher(Algorithm, secret)
// 更新解密数据
let decrypted = decipher.update(crypted, 'hex', 'utf8')
// 生成解密数据
decrypted += decipher.final('utf8')
// 打印解密数据
console.log(decrypted)

1.3 使用Cipher与管道流来加密解密文件

// 加载 crypto 模块
const crypto = require('crypto')
// 加载 fs 模块
const fs = require('fs')
// 解密密钥
const secret = '123456'
// 加密与解密算法 可用 crypto.getCiphers() 方法查看算法各类
const Algorithm = 'aes192'
// 创建加密实例
const cipher = crypto.createCipher(Algorithm, secret)
// 创建输入流 input.txt 为要加密的文件
const read = fs.createReadStream('input.txt')
// 创建输出流 encrypted.xt 加密后的文件
const write = fs.createWriteStream('encrypted.txt')
// 通过管道流生成加密文件
read.pipe(cipher).pipe(write)
// 创建实例解密文件
const decipher = crypto.createDecipher(Algorithm, secret)
// 创建输入流 encrypted.txt 为要解密的文件
const input = fs.createReadStream('encrypted.txt')
// 创建输出流 decrypted.txt 为解密后的文件
const ouput = fs.createWriteStream('decrypted.txt')
// 通过管道流生成解密文件
input.pipe(decipher).pipe(ouput)

2.创建Hash与Hmac摘要

2.1 创建Hash

// 加载 crypto 模块
const crypto = require('crypto')
// 创建 Hash 的算法, 可通过crypt.getHashes() 方法获取算法各类
const Algorithm = 'md5'
// 创建 hash 实例
const hash = crypto.createHash(Algorithm)
// 使用update方法更新要加密的数据
hash.update('Hello Wrold!')
// 生成加密后的数据, 以 hex 方式生成
let digest = hash.digest('hex')
// 打印生成结果
console.log(digest)

2.1 创建Hmac

// 加载 crypto 模块
const crypto = require('crypto')
// 创建摘要的算法
const Algorithm = 'md5'
// 密钥
const secret = '123456'
// 创建 hmac 实例
const hmac = crypto.createHmac(Algorithm, secret)
// 使用 update 方法更新加密数据
hmac.update('Hello World!')
// 使用 digest 方法生成加密数据
const digest = hmac.digest('hex')
// 打印加密后数据
console.log(digest)

3. 签名生成与验证签名

签名主要作用如下:

  1. 确认信息来源于特定的主体。
  2. 确认信息完整、未被篡改。

签名的验证主要经两个过程,发送方生成签名,接收方验证签名, 需要使命openssl生成公钥与私钥,私钥用来生成签名,公钥用来验证签名数据

私钥生成:openssl genrsa  -out private_key.pem 1024

公钥生成: openssl req -key private_key.pem -new -x509 -out public_key.pem

// 加载 crypto 模块
const crypto = require('crypto')
// 加载 fs 模块
const fs = require('fs')
// 读取私钥
const privateKey = fs.readFileSync('private_key.pem').toString()
// 读取公钥
const publicKey = fs.readFileSync('public_key.pem').toString()
// 验证的数据
const data = 'Hello World!'
// 签名算法
const Algorithm = 'SHA256'// 创建签名
const sign = crypto.createSign(Algorithm)
// 使用 update 方法更新数据
sign.update(data)
// 生成签名 以 hex 格式输入数据
const sig = sign.sign(privateKey, 'hex')// 验证签名
const verify = crypto.createVerify(Algorithm)
// 使用 updata 方法更新数据
verify.update(data)
// 验证签名的数据是否正确
const result = verify.verify(publicKey, sig, 'hex')
// 打印签名验证结果
console.log(result)

使用node加密解密数据,创建Hash/HMAC,并生成签名与验证签名相关推荐

  1. js脚本锁计算机软件,JS使用插件cryptojs进行加密解密数据实例

    本文实例讲述了JS使用插件cryptojs进行加密解密数据.分享给大家供大家参考,具体如下: Testing websockets var key = 'BOTWAVEE'; //CBC模式加密 fu ...

  2. node 加密解密模块_NodeJS之crypto模块公钥加密及解密

    NodeJS有以下4个与公钥加密相关的类. Cipher: 用于加密数据: Decipher: 用于解密数据: Sign: 用于生成签名: Verify: 用于验证签名: 在使用公钥加密技术时,需要使 ...

  3. 加密解密_使用RSA密钥对加密解密数据

    使用RSA密钥对加密解密数据 作者: 郭政鸿 2021/1/6 前言: 前几天看了非对称加密, 那非对称加密处理常见的https中的应用, 平时我们可以用来做什么呢? 1. 生成RSA密钥对 使用op ...

  4. PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解...

    一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...

  5. 加密解密和怎么造加密解密数据

    1.一般对于一些项目,会对用户的信息进行加密解密后再处理 举个例子:用户名.密码加密后再处理,页面给出的是一堆堆经过加密的数据 用户名和密码加密后:eyJ1aWQiOiIxMTFkNWFmZGRmMz ...

  6. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  7. node 加密解密模块_NODE.JS加密模块CRYPTO常用方法介绍

    使用require('crypto')调用加密模块. 加密模块需要底层系统提供OpenSSL的支持.它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接. 该模块还提供了一套 ...

  8. node 加密解密模块_聊聊Node加密模块crypto加密原理的那些事

    crypto是node.js中实现加密和解密的模块 在node.js中,使用OpenSSL类库作为内部实现加密解密的手段 OpenSSL是一个经过严格测试的可靠的加密与解密算法的实现工具. 散列(哈希 ...

  9. oracle dbms_crypto,Oracle的dbms_obfuscation_toolkit加密解密数据

    oracle从8i开始提供一个数据加密包:dbms_obfuscation_toolkit.利用这个包,我们可以对数据进行DES,Triple DES或者MD5加密. 本文就此讲解如何使用以及使用过程 ...

最新文章

  1. 理解学习率以及如何提升深度学习的性能
  2. Python之父重回决策层,社区未来如何发展?
  3. 异常处理:SEVERE: Unable to process Jar entry [......]for annotations java.io.EOFException
  4. python必背内容-【经验分享】学Python必背的初级单词
  5. python装饰器-如何更通俗地讲解Python的装饰器?
  6. 小程序确定取消弹窗_微信小程序定制开发价格确定条件?
  7. C++ STL 线性容器的用法
  8. 自动化部署工具PUPPET介绍
  9. 利用计算机形考试二,计算机应用基础形考试题
  10. Android:随笔—— ConstraintLayout 效率爆表的技巧
  11. 工具类篇——时间处理Calendar类
  12. 实施ERP系统的一般方法和步骤
  13. 演示账号激活的过程:注册——向指定邮箱发送邮件——用户登录邮箱,激活账号
  14. 《Dive Into Deeping Learing》学习笔记:深度学习基础
  15. 城管系统服务器,数字城管系统建设方案详细.doc
  16. 一周信创舆情观察(2.1~2.7)
  17. Java使用iText PDF按页(逐页、单页)拆分PDF
  18. 用PowerPoint巧做特效字幕(转)
  19. 计算机里藏应用,用这3招,轻松揪出电脑中的隐藏文件,让恶意软件无处藏身...
  20. cad抛物线曲线lisp_CAD能画抛物线吗?

热门文章

  1. 7.13软件(结构)设计说明(SDD)
  2. mongodb5.0下载详细安装教程(win10)
  3. 通关Android Lint
  4. Xcode6.2正式版 下载地址(网盘)
  5. 买新能源车,几年真能省出一辆车吗
  6. 【plang1.4.3】编写水母动画脚本
  7. java的rsa加密算法_用java编程实现RSA加密算法
  8. Hybrid App开发总结
  9. BO与BW的权限角色映射
  10. Python爬虫脚本,初级入门爬取英雄联盟所有皮肤(源码)