在信息安全越来越受到重视的今天,各种前端加密也变得越来越重要。通常在与服务器的交互中,为了保证数据传输的安全,避免被人抓包篡改,除了应用https之外,还需要对传输的数据进行加密和解密。目前常见的加密算法可以分为三类:对称加密算法:AES,...非对称加密算法:RSA,...哈希算法:MD5,...二、对称加密算法对称加密(也叫私钥加密)指加密和解密使用相同的密钥的加密算法。它要求发送方和接收方在安全通信之前就密钥达成一致。对称算法的安全性取决于密钥。泄露密钥意味着任何人都可以解密他们发送或接收的消息,因此密钥的保密性对于通信的安全非常重要。特点优点:算法开放,计算量小,加密速度快,加密效率高。缺点:在传输数据之前,发送方和接收方必须约定一个密钥,然后双方都保存这个密钥。如果一方的密钥泄露,加密后的信息将不安全。使用场景:本地数据加密、https通信、网络传输等。AESAES:高级加密标准(AdvancedEncryptionStandard)是目前最常见的对称加密算法(微信小程序加密传输使用该加密算法)。密钥:用于加密明文的密码。密钥由接收方和发送方协商生成,但不能直接在网络上传输,否则会泄露密钥。通常,密钥通过非对称加密算法进行加密,然后通过网络传输给对方,或者直接面对面讨论密钥。密钥绝对不能泄露,否则攻击者将恢复密文并窃取数据。当项目中需要使用AES加密时,可以使用开源的js库:crypto-jsvarCryptoJS=require('crypto-js');vardata={id:1,text:'HelloWorld'};//encrypt生成密文varciphertext=CryptoJS.AES.encrypt(JSON.stringify(data),'secret_key_123').toString();//解密得到明文varbytes=CryptoJS.AES.decrypt(ciphertext,'secret_key_123');vardecryptedData=JSON.parse(bytes.toString(CryptoJS.enc.Utf8));3、非对称加密算法非对称加密算法需要两个密钥:公钥(publickey:简称公钥)和私钥(privatekey:简称私钥)。公钥和私钥是一对。如果数据是用公钥加密的,就只能用对应的私钥解密。由于加密和解密使用两个不同的密钥,所以这种算法称为非对称加密算法。特性优点:与对称加密相比,非对称加密具有更好的安全性。缺点:加解密耗时长,速度慢,只适合加密少量数据。使用场景:RSARSA加密算法是https会话、CA数字证书、信息加密、登录认证等早期最常见的非对称加密算法。RSA于1977年由RonRivest、AdiShamir和LeonardAdleman提出。RSA是由他们三个姓氏的首字母组成的。当项目中需要使用RSA加密时,可以使用开源的js库:jsencrypt//使用公钥加密varpublicKey='public_key_123';varencrypt=newJSEncrypt();encrypt.setPublicKey(publicKey);varencrypted=encrypt。encrypt('HelloWorld');//使用私钥解密varprivateKey='private_key_123';vardecrypt=newJSEncrypt();decrypt.setPrivateKey(privateKey);varuncrypted=decrypt.decrypt(encrypted);4.哈希算法哈希,一般译作“散列”,也直接音译为“散列”,是将一个任意长度的输入(也叫预映射,原像)通过哈希算法转换成固定长度的输出,输出为哈希值。这种转换是一种压缩映射,即哈希值的空间通常远小于输入的空间,不同的输入可能会被哈希成相同的输出,无法从哈希中唯一确定输入值价值。简单的说就是将任意长度的消息压缩成固定长度的消息摘要的功能。特点优点:不可逆、易计算、特性缺点:可能存在哈希冲突使用场景:文件或字符串一致性校验、数字签名、认证协议MD5是一种比较常见的哈希算法。对于MD5来说,有两个特点很重要,第一:明文数据散列后的值是定长的;第二:任何一条明文数据,经过散列后,结果必须始终保持不变。前者是指可能有两段明文哈希后得到相同的结果,后者是指如果我们对特定数据进行哈希,结果一定是相同的。比如登录时,将密码用md5加密后传给服务器。服务器中的密码也是经过md5加密后存储的,所以只需要验证加密后的密文是否一致即可。当项目中需要使用MD5加密时,可以使用开源的js库:JavaScript-MD5varhash=md5('HelloWorld');//b10a8db164e0754105b7a99be72e3fe55.Base64编码Base64编码只是一种编码格式,并不是一种加密算法.可用于在HTTP环境下传递较长的标识信息。特点:任何二进制数据用Base64编码加密后,数据量都会变大,大约大1/3。编码后,有一个非常显着的特征。末尾有一个=号用于反向解码。Base64编码不可读所有现代浏览器都提供Base64编码和解码方法,btoa()和atob()varenc=window.btoa('HelloWorld');//SGVsbG8gV29ybGQ=varstr=window.atob(enc);//HelloWorld6.总结在业务http请求中,前端随机生成AES密钥,从服务端获取RSA公钥,对AES密钥进行非对称加密,在请求头中将加密后的密钥传递给服务端,以及AES用于加密密钥。正文已加密。服务器收到请求头中的加密密钥,用RSA密钥解密,得到明文AES密钥解密请求体。md5具有校验字符串一致性的特性。为了避免请求被拦截后对body进行篡改,可以在发送请求时对body字符串进行md5加密,在请求头中传输。服务器收到请求后,对body进行解密,然后检查md5和请求头,验证请求是否被篡改。
