3.1 Vue实战--电商后台管理系统 的登录功能 补充了 加密功能

本文讲述了在登录功能中,为保护用户密码和用户名的安全,通过前端使用公钥加密,后端使用私钥解密的方式实现数据加密传输。首先在前端利用jsencrypt库和生成的公钥对用户名和密码进行加密,然后在后端使用node-rsa库的私钥进行解密。这一过程有效防止了明文传输带来的安全隐患。
摘要由CSDN通过智能技术生成

1. 原来功能的不足

当登录成功之后,打开调试面板,找到“网络”,在请求体中会看到密码和用户名,这是不安全的。这是因为:http协议是明文传输,只要别人一抓包就可以获取到传输的报文。下面进行密码和用户名的加密。

在这里插入图片描述

2. 进行前端加密后端解密

2.1 前端加密

先生成一对公钥私钥,生成公钥私钥对的网址: http://web.chacuo.net/netrsakeypair

在这里插入图片描述
在这里插入图片描述

安装 jsencrypt :

npm install jsencrypt 

再到 src/components/Login.vue中去修改代码:

在这里插入图片描述

import JSEncrypt from 'jsencrypt/bin/jsencrypt'
import { publicKey } from '../config/key.js'

在这里插入图片描述

 const encryptor = new JSEncrypt() // 新建JSEncrypt对象
      this.$refs.loginFormRef.validate(async (valid) => {
        // console.log(valid)
        if (!valid) return

        encryptor.setPublicKey(publicKey) // 设置公钥

        const rsaUsername = encryptor.encrypt(this.loginForm.username) // 对用户名加密
        const rsaPassWord = encryptor.encrypt(this.loginForm.password) // 对需要加密的数据进行加密

        const { data: res } = await this.$http.post('login', {
          username: rsaUsername,
          password: rsaPassWord
        })
        if (res.meta.status !== 200) return this.$message.error('登录失败')
        this.$message.success('登录成功!')

前端部分修改结束。

2.2 后端部分的修改

找到后台的文件夹 vue_api_server:
在这里插入图片描述

先安装node-rsa:

npm i node-rsa

先找到module/passport.js, 登录功能写在这个文件下:

在这里插入图片描述

加入下列代码:

var NodeRSA = require("node-rsa");
const _priKey = `
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANb9zLX9ppDz61Vz
LuLpTcE+TINiPZfcmCh2mMFEfETRxOf4Fef8tq9Mt1gvLPmRnDQeX+ECxFGCiy8L
2HAp1dV9g+VFjn2I7smiTdS8I5NoyYrCMvWAR5bDxl7wd2alTIuQup5zwPyMcpr7
RfNLk6TgntRxc3lvFqfHJPp3/WgHAgMBAAECgYEAiCfKGsPeVlS0CLTez8QTgzvS
Ny7jdSa2koGxckzOKsNy4boDHZ21kMWUI9wUrqWh+Hv4GsemzzxOq2fkFfzYt6gG
Osfz8KZ6sBmuKKibWGf4qQ6vlINZnbCIxNg7dLFqPLR4YISnoo+PWasmX7Py8zKz
kv5ZsIu9KFLb0ufCaSkCQQDvDU4M9VQHyIb1VnWluI9pPW2KCCMTQHkwIHdkC1eR
h9XG/JKvOAcvWssKaaoCr1yQ6kk0inkePwkzvCqPmH67AkEA5jvOK4lM967D+ldl
2vDN3D9yUof/68WWUbqCW4CcZDksGNInS4TsXQm95xpBom8JDIza6m2paDCRGUol
ii1VJQJAOyY3oc0yNZrQifQSuCaqlYe1iunog+L4GYhvAjosOL47jzj/sotSe80j
YDg08OUjKlhONMnuniVKyZpNjapV8QJADNcTBXyPzVRy25haNt6tLHZhYtbw3+5S
FtbHBGFk13YUzoGR7XVJVVsAu03MkUmOAKQuZVqeUxA6V2W6OD2U/QJALnDPo2VI
ze9w7MsvwGBEcjcl42IC6CWQZMw2rhGP1KsSCFek6iKDQiZwd3FJ2RM9Ua2OSl/d
b+Ndk8WlFTA2ug==
-----END PRIVATE KEY-----

`

const privateKey = new NodeRSA(_priKey);
privateKey.setOptions({encryptionScheme: 'pkcs1'});

在这里插入图片描述
再找到 module.exports.setup加入下面这句代码:
在这里插入图片描述

	username = privateKey.decrypt(username, 'utf8');//解密 用在登录接口
			password = privateKey.decrypt(password, 'utf8');//解密 用在登录接口

重新编译,运行,再打开面板,可以看到密码和用户名不再是明文显示了:

在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值