Notes for a front-end developer, esyou.net

0%

JAVASCRIPT-NODEJS-BASE64加密解密URL参数

为了保证全段传递都后端的数据安全性,比如用户登录时输入的密码,在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('&')}`)