python实时生成rsa公密匙对,前端获取公匙加密信息

23 篇文章 0 订阅

在这里插入图片描述
这里我没有做获取key的接口,而是用socket.io自定义一个事件,来触发生成公匙。如图
在这里插入图片描述
1.pip安装flask-socket
2.注册handle_key事件
在这里插入图片描述
3.监听key事件,并生成公匙、私匙,这里可以保存在自己数据库,也可以保存成pem文件,注意python要安装对应的库

在这里插入图片描述
4.监听login事件,并用私匙解密,完成登录!
这里我暂未写完解密,待以后补充…
在这里插入图片描述
5.vue前端用获取的公匙加密登录信息:
npm安装jsencrypt
也可以直接引入
下面是vuesocketio的配置,链接服务器,端口由后端决定
在这里插入图片描述
在onload中加入监听socket事件和获取key的socket请求
在这里插入图片描述

this.$socket.emit('key', '');
		this.sockets.subscribe('key', (data) => {
			this.key = data
		});
		this.sockets.subscribe('message', (data) => {
			this.msg(data)
		});
		this.sockets.subscribe('msg', (data) => {
			console.log(data)
			data = JSON.parse(data)
			this.msg(data.msg,data.type)
		});

获取到后台的公匙之后用jsencrypt加密登录信息
在这里插入图片描述

if(this.user == '' || this.pwd == ''){
				return this.msg('账号密码不能为空','error')
			}
			let that = this
			let encryptor = new JSEncrypt() // 新建JSEncrypt对象
			let publicKey = this.key
			
			encryptor.setPublicKey(publicKey) // 设置公钥
			var rsaPwd = encryptor.encrypt(that.pwd) // 对需要加密的数据进行加密
			// var rsaPwd = this.$rsaCrypto(publicKey,that.pwd)
			this.$socket.emit('login', {pwd:rsaPwd,user:this.user})
from flask import Flask, render_template
from flask_socketio import SocketIO, send, emit, ConnectionRefusedError, Namespace
import sys
from Crypto import Random
import json
from Crypto.PublicKey import RSA

print(sys.version)
print(sys.getdefaultencoding())
print(sys.getfilesystemencoding())

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)


@socketio.on('connect')
def test_connect():
    emit('my response', {'data': 'Connected'})
    print('Client connect')


@socketio.on('disconnect')
def test_disconnect():
    print('Client disconnected')


@socketio.on('message')
def handle_message(message):
    print('received login: ' + str(message))


def handle_key(message):
    print('received key:' + str(message))


socketio.on_event('key', handle_key, namespace='/chat')


def handle_login(message):
    print('received login: ' + str(message))


socketio.on_event('login', handle_login, namespace='/chat')


@socketio.on('login')
def handle_login(message):
    emit('msg', json.dumps({'type': 'success', 'msg': '登录成功'}, ensure_ascii=False))
    print(json.dumps({'type': 'success', 'msg': '登录成功'}, ensure_ascii=False))


@socketio.on('key')
def handle_key(message):
    RANDOM_GENERATOR = Random.new().read
    rsa = RSA.generate(1024, RANDOM_GENERATOR)
    # master的秘钥对的生成
    PRIVATE_PEM = rsa.exportKey()
    with open('master-private.pem', 'w') as f:
        f.write(PRIVATE_PEM.decode('utf-8'))
    print
    PRIVATE_PEM
    PUBLIC_PEM = rsa.publickey().exportKey()
    print
    PUBLIC_PEM
    with open('master-public.pem', 'w') as f:
        f.write(PUBLIC_PEM.decode('utf-8'))
    emit('key', PUBLIC_PEM.decode('utf-8'))


if __name__ == '__main__':
    socketio.run(app)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值