最近项目需要用到前端加密,某些特定的数据需要前端加密之后再传输到后端,然后后端再按照与前端约定好的方式进行解密。
因此,在做项目的过程中也大概了解了一下常见的加密方式。
加密算法分为单向加密和双向加密。
单向加密包括MD5,SHA加密算法等等。单向加密算法是不可逆的,也就是无法将加密后的数据恢复成原始数据,除非采取碰撞攻击和穷举的方式。
像是银行账户密码的存储,一般采用的就是单向加密的方式。
双向加密是可逆的,存在密文的密钥,持有密文的一方可以根据密钥解密得到原始明文,一般用于发送方和接收方都能通过密钥获取明文的情况。
双向加密包括对称加密和非对称加密。对称加密包括DES加密,AES加密等等,本文档介绍的主要是AES加密。而非对称加密包括RSA加密,ECC加密。
RSA加密
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。
其加密过程是:
1 | 1、生成一对公私钥 |
其中的关键在于私钥的保密性,利用公钥加密的数据只能公共唯一的私钥才能解密。
DEMO1
https://www.epoos.com/demo/jsencrypt/rsa-demo.html
AES加密
AES简介
高级加密标准(AES,Advanced Encryption Standard)为最常见的#对称加密#算法(微信小程序加密传输就是用这个加密算法的)。
AES加密(Advanced Encryption Standard,AES),又称 高级加密标准,AES的基本要求是,采用对称分组密码体制,AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。
对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:
DEMO2
https://www.epoos.com/demo/jsencrypt/aes-demo.html
对于WEB开发来说,AES前端加密其实意义并不大,因为AES加密的过程就是将数据加盐之后以AES加密的方式进行加密。
要想做到这些,首先就得将SALT以及DATA传输到前端。
然而,这些数据放到了前端,那也就意味着对客户端的用户来说是可见的了
这些数据在网络上进行传输的过程中被拦截了之后,数据也就将没有任何遮掩的暴露在攻击者眼前。
**RSA**加密倒是可以避免这个问题
只要服务端将公钥传输到前端,前端拿到公钥之后以RSA加密方式对数据进行加密
因为RSA公钥加密过的数据唯有唯一的私钥才能进行解密,因此即使用户的数据被拦截之后,仍然可以保证其私密性。
但是由于RSA加密用的是非对称加密,这样如果对于大量的数据进行加密的时候就会很耗费性能
因此如果是对于大量的数据进行加密,就需要用到对称加密和非对称加密共同来完成了。
具体实现方式也是类似于https的传输方式
1 | 使用非对称加密传递密钥 |