为了保证全段传递都后端的数据安全性,比如用户登录时输入的密码,在post发送请求中可能会直接暴露了明文。因此可能需要前端进行相应的加密传递到后端,再由后端进行解密后再继续操作。
我使用base64的加密方式对密码进行加密,不过大家都知道base64很容易就被破解了,因此,我会替换掉几个base64生成字符串中的字母,这样就可以达到别人很难破解的目的了。具体直接看代码!
1 | //利用base64加密传输数据 |
2 | function base64Encryption(str) { |
3 | let base64 = Buffer.from(str, 'utf-8').toString('base64') |
4 | // 把base64源数据中的M与Q替换成其他字符串,防止别人破解 |
5 | let base64Confusion = base64.replace(/\M/, '=J=') |
6 | base64Confusion = base64Confusion.replace(/\Q/, '=V=') |
7 | return base64Confusion |
8 | } |
9 | function base64Decrypt(str) { |
10 | // 先把base64混淆后的字符串转换为正常额base64字符串,在进行解密 |
11 | let base64 = str.replace(/=J=/, 'M') |
12 | base64 = base64.replace(/=V=/, 'Q') |
13 | return Buffer.from(base64, 'base64').toString('utf-8') |
14 | } |
15 | // 此加密不仅可以用于用户密码加密,也可以用于url传参加密 |
16 | // 一下是加密一般字符串 |
17 | var data = '123m你好' |
18 | console.log('加密:', base64Encryption(data)) |
19 | console.log('解密:',base64Decrypt(base64Encryption(data))) |
20 | |
21 | // 一下是加密url传参,如url为http://localhost/users?userName=Jack&password=1234567890 |
22 | var userName = 'Jack' |
23 | var password = '1234567890' |
24 | console.log(`加密: http://localhost/users?userName=${base64Encryption(userName)}&password=${base64Encryption(password)}`) |
25 | // 后端解码 |
26 | console.log(`解密: http://localhost/users?userName=${base64Decrypt(base64Encryption(userName))}&password=${base64Decrypt(base64Encryption(password))}`) |
27 | // 我们可以这样进行加密连接参数的字符串, 比如字符串是userName=Jack&password=1234567890 |
28 | var params = `userName=${userName}&password=${password}` |
29 | console.log(`加密:http://localhost/users?data=${base64Encryption(params)}`) |
30 | // 后端解码应该是拿到data的值为dXNlck5hbWU9SmFjayYmcGFzc3dvcm=V=9=J=TIzNDU2Nzg5MA==,并解码此值并对其进行分割获取相应的数据内容 |
31 | console.log(`解密data:${base64Decrypt(base64Encryption(params))}, 后端分割:${base64Decrypt(base64Encryption(params)).split('&')}`) |