crypto

  • 1 哈希算法 hash
  • 2 对称加密 AES

crypto模块的主要功能有 哈希算法、对称加密以及非对称加密

1 哈希算法 hash

hash 通常给数据签名,它是一种不可逆的加密算法
常用的 hash 算法有 md5、sha1、sha256、sha512等等。

MD5 是这一种常用的哈希算法,具有长度固定(输出总是16个字节)。

// 引入 crypto
const crypto = require('crypto');// 使用 crypto.createHash 创建哈希算法,传入一个参数为算法类型,如 mad5、sha1、sha256等
const hash = crypto.createHash('md5');// 可任意多次调用 update() 进行计算
hash.update('swim');
hash.update('swimming');// 转换完的结果
// 'hex' 按照 16进制的数字存储
console.log(hash.digest('hex')); // b41dd3655615d7d830e1884ed477e7a5// 'base64 按照 base64 的格式来展示
// console.log(hash.digest('base64')); // tB3TZVYV19gw4YhO1HfnpQ==

Hmac 算法也是一种哈希算法,它可以利用 MD5 或 SHA1 等哈希算法。

不同的是,Hmac 还需要一个秘钥:只要密钥发生了变化,那么同样的输入数据也会得到不同的签名,因此 Hmac 算法是一种增强的哈希算法。

// 引入 crypto
const crypto = require('crypto');// 使用 crypto.createHmac 创建哈希算法,传入两个参数。
const hmac = crypto.createHmac('sha1', 'secret_key'); //两个参数:算法的类型、秘钥
hmac.update('swim');
console.log(hmac.digest('hex')); // 7720c56314a9ebee8d3aed17cacd77d0646d4011//只要密钥发生了变化,那么同样的输入数据也会得到不同的签名
const hmac = crypto.createHmac('sha1', 'secret_key2');
hmac.update('swim');
console.log(hmac.digest('hex')); // cb3c58e324da23284065f2d91c49c68967db538b

2 对称加密 AES

AES 是一种常用的对称加密算法 ,加密解密都用同一个秘钥。

crypto 模块提供了 AES 支持,但需要自己封装好函数,方便使用:

// 引入 crypto
const crypto = require("crypto");// 1 定义加密方法
function aesEncrypt(key, iv, data) {// 三个参数:加密的key、加密的iv、需要加密的数据// 创建加密对象:三个参数(加密的算法,加密的key,加密的iv)const cipher = crypto.createCipheriv("aes-128-cbc", key, iv);// 开始加密:三个参数(要加密的数据、加密前的数据类型以及加密后的数据格式)let crypted = cipher.update(data, "binary", "hex");// 加密结束:结尾加上 cipher.final('hex') 表示结束crypted += cipher.final("hex");// 返回密文return crypted;
}// 2 定义解密方法
function aesDecrypt(key, iv, crypted) {// 转换解密数据:把需要解密的数据,转化成 buffer 格式,再转换成二进制crypted = Buffer.from(crypted, "hex").toString("binary");// 创建解密对象const decipher = crypto.createDecipheriv("aes-128-cbc", key, iv);// 开始解密:三个参数(要解密的数据、解密前的数据类型以及解密后的数据格式)let decrypted = decipher.update(crypted, "binary", "utf8");// 解密结束decrypted += decipher.final("utf8");// 返回明文return decrypted;
}// 3 定义 key 和 iv
const key = "abcdef0123456789";
const iv = "0123456789abcdef";
// 注意:加密算法选128时,就需要16个字节128位的kye和iv, 16*8 = 128 1个字节占8位// 4 加密
const data = "hello world";
const crypted = aesEncrypt(key, iv, data); // 加密
console.log("加密结果:", crypted); // 808da3d74f3bed91b38e3ca27d1a47a1// 5 解密
const decrypted = aesDecrypt(key, iv, crypted); // 解密
console.log("解密结果:", decrypted); // hello world// 注意:加密和解密时,使用的 key 和 iv 必须同一个

使用 crypto 模块进行加密和解密相关推荐

  1. crypto DES 的加密与解密

    crypto DES 的加密与解密 最近在做一个类似举报功能的项目,其中需要对举报的内容及其他敏感信息进行des加密,因此接触并学习了一下,但是还是碰上一些坑(先在这里留一个坑吧,加密后的数据传到后端 ...

  2. javax.crypto.Cipher类--加密和解密

    javax.crypto.Cipher类提供加密和解密功能. 一.获得Cipher对象 通过调用Cipher类中的getInstance静态工厂方法得到Cipher对象. public static ...

  3. 前端用crypto.js进行加密和解密

    import CryptoJS from 'crypto-js' function getAesString(data,key,iv){//加密var key = CryptoJS.enc.Utf8. ...

  4. DES加密和解密工具,可以对字符串进行加密和解密操作

    DES加密和解密工具,可以对字符串进行加密和解密操作 import java.io.UnsupportedEncodingException;import java.security.Key;impo ...

  5. Java工具类——DES加密和解密工具 I

    可以指定不同的密钥对同一字符串进行不同的加密操作,增强加密性能. package com.app; import java.security.Key; import java.security.Sec ...

  6. Python crypto模块实现RSA和AES加密解密

    Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...

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

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

  8. NodeJS 加密 —— crypto 模块

    原文出自:https://www.pandashen.com 加密简介 加密是以某种算法改变原有的信息数据,使得未授权用户即使获得了已加密信息,因不知解密的方法,无法得知信息真正的含义,通过这种方式提 ...

  9. 使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题)

    使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题) 参考文章: (1)使用crypto模块实现md5加密功能(解决中文加密前后端不一致的问题) (2)https://www.cn ...

最新文章

  1. XP硬盘安装Ubuntu 10.10双系统图解(转)
  2. JVM调优:GC标记清除回收算法
  3. 支付宝客户端架构分析:自动化日志收集及分析
  4. (转)javascript异步编程的四种方法
  5. 2017.6.4 problem b 失败总结
  6. 【node内存泄漏耗尽之解决方法】
  7. ionic3编译到Android 相关配置
  8. 不错的网络协议栈测试工具 — Packetdrill
  9. 2019python下半年考试报名时间_关于2019年下半年全国计算机等级考试报名的通知...
  10. VR火得不行 那么它商业化的突破点到底在哪里?
  11. 拨开零售电商数字化转型迷雾,电商RPA应用揭秘
  12. echart4.0 map支持dataset实例
  13. Python库turtle的趣味性用法,欢迎来品尝。
  14. python怎样发音_python在线发音_python翻译
  15. 如何给自制的微信小程序设置一个密码
  16. Linux下安装mysql完整教程
  17. 浏览器无法访问localhost
  18. 【方向盘】jdbc使用到了哪些设计模式
  19. 读书笔记 摘自:《流浪地球(刘慈欣作品)》
  20. android调用相机返回大图,Android调用相机拍照返回原图

热门文章

  1. 【skLearn 练习】随机森林回归填补缺失值
  2. reverse()的使用
  3. 【信号与系统】(二)信号与系统概述——基本信号
  4. mysql中复制表结构的方法(亲测通过)
  5. Win10中找不到gpedit.msc
  6. keep alive是什么?
  7. 微信小程序之picker选择器获取值得两种方法
  8. docker部署开发环境
  9. 如何解决IAR不能设置断点的问题
  10. 《因果学习周刊》第13期:ICLR 23因果推断高分论文