Node.js 之 Crypto模块

目录

    • 一、下载加密库:
    • 二、MD5加密
    • 三、MAC加密
    • 四、对称加密、非对称加密

一、下载加密库:

npm install crypto

常见的摘要算法 与 对应的输出位数:

  • MD5:128位
  • SHA-1:160位
  • SHA256 :256位
  • SHA512:512位

二、MD5加密

  1. 概述:
    MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。

  2. MD5主要特点:
    不可逆,相同数据的MD5值肯定一样,不同数据的MD5值不一样

    var crypto = require('crypto');  //引入crypto模块
    var md5 = crypto.createHash('md5');  
    var message = 'hello';
    var digest = md5.update(message, 'utf8').digest('hex'); //hex转化为十六进制
    console.log(digest);
    // 输出如下:注意这里是16进制
    // 5d41402abc4b2a76b9719d911017c592
    

三、MAC加密

MAC(Message Authentication Code):消息认证码,用以保证数据的完整性。运算结果取决于消息本身、秘钥。
MAC可以有多种不同的实现方式,比如HMAC。

HMAC(Hash-based Message Authentication Code):可以粗略地理解为带秘钥的hash函数。

MAC加密

const crypto = require('crypto');
// 参数一:摘要函数
// 参数二:秘钥
let hmac = crypto.createHmac('md5', '123456');
let ret = hmac.update('hello').digest('hex');
console.log(ret);
// 9c699d7af73a49247a239cb0dd2f8139

四、对称加密、非对称加密

  • 加密/解密:给定明文,通过一定的算法,产生加密后的密文,这个过程叫加密。反过来就是解密
  • 秘钥:为了进一步增强加/解密算法的安全性,在加/解密的过程中引入了秘钥。秘钥可以视为加/解密算法的参数,在已知密文的情况下,如果不知道解密所用的秘钥,则无法将密文解开。

根据加密、解密所用的秘钥是否相同,可以将加密算法分为对称加密、非对称加密。

  1. 对称加密

    加密、解密所用的秘钥是相同的,即encryptKey === decryptKey。

    常见的对称加密算法:DES、3DES、AES、Blowfish、RC5、IDEA。

    AES有很多不同的算法,如aes192,aes-128-ecb,aes-256-cbc等

    加、解密伪代码:

    encryptedText = encrypt(plainText, key); // 加密
    plainText = decrypt(encryptedText, key); // 解密
    
  2. 非对称加密

    又称公开秘钥加密。加密、解密所用的秘钥是不同的,即encryptKey !== decryptKey。

    加密秘钥公开,称为公钥
    解密秘钥保密,称为秘钥

    常见的非对称加密算法:RSA、DSA、ElGamal。

    加、解密伪代码

    encryptedText = encrypt(plainText, publicKey); // 加密
    plainText = decrypt(encryptedText, priviteKey); // 解密
    
  3. 对比与应用

    除了秘钥的差异,还有运算速度上的差异。通常来说:

    • 对称加密速度要快于非对称加密。
    • 非对称加密通常用于加密短文本,对称加密通常用于加密长文本。
    • 两者可以结合起来使用,比如HTTPS协议,可以在握手阶段,通过RSA来交换生成对称秘钥。在之后的通讯阶段,可以使用对称加密算法对数据进行加密,秘钥则是握手阶段生成的。
      备注:对称秘钥交换不一定通过RSA,还可以通过类似DH来完成

你可能感兴趣的:(#,nodejs,javascript)