互联网时代,网络上的数据量每天都在以惊人的速度增长。同时,各类网络安全问题层出不穷。在信息安全重要性日益凸显的今天,作为一名开发者,需要加强对安全的认识,并通过技术手段增强服务的安全性。
crypto模块是nodejs的核心模块之一,它提供了安全相关的功能,如摘要运算、加密、电子签名等。很多初学者对着长长的API列表,不知如何上手,因此它背后涉及了大量安全领域的知识。
本文重点讲解API背后的理论知识,主要包括如下内容:
摘要(hash)、基于摘要的消息验证码(HMAC)
对称加密、非对称加密、电子签名
分组加密模式
摘要(hash)
摘要(digest):将长度不固定的消息作为输入,通过运行hash函数,生成固定长度的输出,这段输出就叫做摘要。通常用来验证消息完整、未被篡改。
摘要运算是不可逆的。也就是说,输入固定的情况下,产生固定的输出。但知道输出的情况下,无法反推出输入。
伪代码如下。
digest = Hash(message)
常见的摘要算法 与 对应的输出位数如下:
MD5:128位
SHA-1:160位
SHA256 :256位
SHA512:512位
nodejs中的例子:
var crypto = require('crypto'); var md5 = crypto.createHash('md5'); var message = 'hello'; var digest = md5.update(message, 'utf8').digest('hex'); console.log(digest); // 输出如下:注意这里是16进制 // 5d41402abc4b2a76b9719d911017c592
备注:在各类文章或文献中,摘要、hash、散列 这几个词经常会混用,导致不少初学者看了一脸懵逼,其实大部分时候指的都是一回事,记住上面对摘要的定义就好了。
MAC、HMAC
MAC(Message Authentication Code):消息认证码,用以保证数据的完整性。运算结果取决于消息本身、秘钥。
MAC可以有多种不同的实现方式,比如HMAC。
HMAC(Hash-based Message Authentication Code):可以粗略地理解为带秘钥的hash函数。
nodejs例子如下:
const crypto = require('crypto'); // 参数一:摘要函数 // 参数二:秘钥 let hmac = crypto.createHmac('md5', '123456'); let ret = hmac.update('hello').digest('hex'); console.log(ret); // 9c699d7af73a49247a239cb0dd2f8139
对称加密、非对称加密
加密/解密:给定明文,通过一定的算法,产生加密后的密文,这个过程叫加密。反过来就是解密。
encryptedText = encrypt( plainText ) plainText = decrypt( encryptedText )
内容版权声明:除非注明,否则皆为本站原创文章。