一、下载加密库:
npm install crypto
常见的摘要算法 与 对应的输出位数:
- MD5:128位
- SHA-1:160位
- SHA256 :256位
- SHA512:512位
二、MD5加密
-
概述:
MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。 -
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
四、对称加密、非对称加密
- 加密/解密:给定明文,通过一定的算法,产生加密后的密文,这个过程叫加密。反过来就是解密
- 秘钥:为了进一步增强加/解密算法的安全性,在加/解密的过程中引入了秘钥。秘钥可以视为加/解密算法的参数,在已知密文的情况下,如果不知道解密所用的秘钥,则无法将密文解开。
根据加密、解密所用的秘钥是否相同,可以将加密算法分为对称加密、非对称加密。
-
对称加密
加密、解密所用的秘钥是相同的,即encryptKey
===
decryptKey。常见的对称加密算法:DES、3DES、AES、Blowfish、RC5、IDEA。
AES有很多不同的算法,如aes192,aes-128-ecb,aes-256-cbc等
加、解密伪代码:
encryptedText = encrypt(plainText, key); // 加密 plainText = decrypt(encryptedText, key); // 解密
-
非对称加密
又称公开秘钥加密。加密、解密所用的秘钥是不同的,即encryptKey !== decryptKey。
加密秘钥公开,称为公钥。
解密秘钥保密,称为秘钥。常见的非对称加密算法:RSA、DSA、ElGamal。
加、解密伪代码:
encryptedText = encrypt(plainText, publicKey); // 加密 plainText = decrypt(encryptedText, priviteKey); // 解密
-
对比与应用
除了秘钥的差异,还有运算速度上的差异。通常来说:
- 对称加密速度要快于非对称加密。
- 非对称加密通常用于加密短文本,对称加密通常用于加密长文本。
- 两者可以结合起来使用,比如HTTPS协议,可以在握手阶段,通过RSA来交换生成对称秘钥。在之后的通讯阶段,可以使用对称加密算法对数据进行加密,秘钥则是握手阶段生成的。
备注:对称秘钥交换不一定通过RSA,还可以通过类似DH来完成