RSA加密——前端JSEncrypt

RSA加密——前端JSEncrypt

介绍

​ JSEncrypt是一个RSA加密库,在没有SSL加密传输通道支持https协议的情况下,该库可以在http传输重要信息如时,保证数据的安全性。我们小组的DDLKiller项目“同步课程中心”的功能需要输入北航学生统一认证账号密码,而统一认证账户对于每位北航同学都尤为重要,一旦泄露将影响个人学业信息及日常学习生活,因此对统一认证密码加密至关重要。此外,由于该加密库使用之后容易拓展,因此我们也在需要传输密码的部分(如登录、注册)使用了加密。

使用

安装

npm install jsencrypt --dep

加密

const pub_key = "xxx"
function encrypt(password) {
	let enc = new JSEncrypt()	// 声明一个新的JSEncrypt对象
	enc.setPublicKey(pub_key)	// 配置公钥
	return enc.encrypt(password)	// 加密
}

改进

​ 为了能够更进一步提高安全性,在Beta阶段我们采用了动态生成随机密钥的方式进行加密,思路为:每次加密前,向后端请求一份随机密钥以及该密钥对应的kid,之后将kid与加密后的密码拼接在一起,用|分隔,作为最终的加密密码返回。这样,后端就能够根据kid找到密钥,进行解密。

async function encrypt(password) {
    var encPass = ""
    await getPubKey().then(res => {  // 等待获取密钥
        let enc = new JSEncrypt()
        enc.setPublicKey(res.pub_key)	// 配置公钥
        encPass = "kid:" + res.key_id + "|" + enc.encrypt(password) // 拼接密文
    })
    return encPass 
}
posted @ 2020-06-04 21:58  kingkongk  阅读(566)  评论(0编辑  收藏  举报