前言
加密解密是前后端开发常常须要应用到的技术,利用场景包含不限于用户鉴权、数据传输等,不同的利用场景也会须要应用到不同的签名加密算法,或者须要搭配不一样的签名加密算法来达到业务指标。所以理解加解密,以及罕用的加解密函数库,能够依据不同的业务场景,抉择适宜当下业务场景的加解密函数库。
安全性威逼
这里借用 workPlus 对于安全性威逼概括,进行阐明:
第一,中断
攻击者无意毁坏和切断别人在网络上的通信,这是对可用性的攻打。
第二,截获
属于被动攻打,攻击者从网络上窃听别人的通信内容,毁坏信息的机密性。
第三,篡改
攻击者成心篡改网络上传送的报文,这是对完整性的攻打。
第四,伪造
攻击者伪造信息在网络传送,这是对真实性的攻打。
加密的意义
数据加密
a. 敏感数据的加密 :敏感数据进行完整性校验和加密存储, 无效避免敏感数据被窃取,篡改,权限被非法获取;
b. 金融领取爱护:保障领取数据在传输和存储过程中的完整性、保密性和领取身份的认证、领取过程的不可否认性;
c. 点子票据验伪:保障电子合同、电子发票、电子保单、电子病历在传输、存储过程中的保密性和完整性;
d. 视频监控平安:保障视频、人脸、车辆、轨迹等隐衷信息,以及集体数据在存储过程中的保密性,避免数据泄露;
信息安全:
a. 撞库操作:是指收集曾经在互联网上透露的用户和明码信息, 生成对应的字典表,并尝试批量登录其余网站,而后失去一系列能够登录的用户, 撞库的起因是因为信息透露, 而且透露的数据没有加密或者加密的形式比拟弱,这样能够取得到原来的用户和明码;
加解密的分类
对称加密
a. 定义: 对称加密(也叫私钥加密)指加密和解密应用雷同密钥的加密算法。有时又叫传统明码算法,就是加密密钥可能从解密密钥中推算出来,同时解密密钥也能够从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是雷同的,所以也称这种加密算法为机密密钥算法或单密钥算法。它要求发送方和接管方在平安通信之前,约定一个密钥。对称算法的安全性依赖于密钥,透露密钥就意味着任何人都能够对他们发送或接管的音讯解密,所以密钥的保密性对通信的安全性至关重要。
b. 特点:对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。
c. 有余:秘钥的治理和散发十分艰难,不够平安。在数据传送前,发送方和接管方必须约定好秘钥,而后单方都必须要保留好秘钥,如果一方的秘钥被泄露,那么加密信息也就不平安了。另外,每对用户每次应用对称加密算法时,都须要应用其他人不晓得的惟一秘钥,这会使得收、发单方所领有的钥匙数量微小,密钥治理成为单方的累赘。
d. 具体算法: DES,AES,3DES,凯撒加密算法等。
非对称加密
a. 定义: 非对称加密算法须要两个密钥:公开密钥(publickey: 简称公钥)和公有密钥(privatekey: 简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥能力解密。
b. 流程: 甲方生成一对密钥并将公钥公开,须要向甲方发送信息的其余角色(乙方)应用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方;甲方再用本人私钥对加密后的信息进行解密。甲方想要回复乙方时正好相同,应用乙方的公钥对数据进行加密,同理,乙方应用本人的私钥来进行解密。
c. 特点: 算法强度简单、安全性依赖于算法与密钥然而因为其算法简单,而使得加密解密速度没有对称加密解密的速度快。
d. 有余 :非对称加密算法比对称加密算法慢数千倍。
e. 具体算法: RSA, RSA能够通过认证来避免中间人攻打, ECC(椭圆曲线加密算法)。
混合加密
a. 流程: 服务器用明文的形式给客户端发送本人的公钥,客户端收到公钥之后,会生成一把密钥(对称加密用的),而后用服务器的公钥对这把密钥进行加密,之后再把密钥传输给服务器,服务器收到之后进行解密,最初服务器就能够平安着失去这把密钥了,而客户端也有同样一把密钥,他们就能够进行对称加密了。
b. 特点: 混合加密则采取两家之长,即解决了秘钥的平安配送问题,同时也进步了加密与解密效率。
数字签名
a. 流程:发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,而后用发送方的私钥对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接管方,接管方首先用与发送方一样的哈希函数从接管到的原始报文中计算出报文摘要,接着再公钥来对报文附加的数字签名进行解密,如果这两个摘要雷同、那么接管方就能确认该报文是发送方的。
b. 数字签名有两种效用:一是能确定音讯的确是由发送方签名并发进去的,因为他人混充不了发送方的签名。二是数字签名能确定音讯的完整性。因为数字签名的特点是它代表了文件的特色,文件如果产生扭转,数字摘要的值也将发生变化。不同的文件将失去不同的数字摘要。 一次数字签名波及到一个哈希函数、接收者的公钥、发送方的私钥。
- 数字证书(或简称证书):是在 Internet 上惟一地标识人员和资源的电子文件。证书使两个实体之间可能进行平安、窃密的通信。
加解密的利用场景
目前业务中应用的是sm2进行加解密
国密即国家明码局认定的国产明码算法。次要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。
1:SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,须要通过加密芯片的接口进行调用。
2:SM2为非对称加密,基于ECC。该算法已公开。因为该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采纳的就是ECC 256位的一种)平安强度比RSA 2048位高,但运算速度快于RSA。
3:SM3 音讯摘要。能够用MD5作为比照了解。该算法已公开。校验后果为256位。
4:SM4 无线局域网规范的分组数据算法。对称加密,密钥长度和分组长度均为128位。
const sm2 = require('sm-crypto').sm2; // uic中 // 控制台中的加密解密利用 import { SM2 } from 'gm-crypto'; // sm2加密 export function encryptSM(str, key) { const result = SM2.encrypt(str, key, { inputEncoding: 'utf8', outputEncoding: 'hex', // 反对 hex/base64 等格局}); // 04 示意非压缩 return '04' + result; } // sm2解密 export function decryptSM(str, key) { return SM2.decrypt(str, key, { inputEncoding: 'hex', outputEncoding: 'utf8', // 反对 hex/base64 等格局 }); }
思考
- 非对称加密中公私钥都能够加密,那么什么时候用公钥加密,什么时候用私钥“加密” ?
- 什么是数字签名,数字签名的作用是什么?
- 为什么要对数据的摘要进行签名,而不是间接计算原始数据的数字签名?
- 什么是数字证书,数字证书解决了什么问题?
前端进行加密到底有没有用?
前端加密不是决定性的保护措施,但却是一种有意义的低成本平安加强计划。