This commit is contained in:
王思川 2022-01-06 17:56:30 +08:00
parent 4b983ba352
commit 1142502907
10 changed files with 234 additions and 2 deletions

50
common/rsa.py Normal file
View File

@ -0,0 +1,50 @@
import base64
from common.scripts import real_file_path
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher
# 获取密钥
def get_key(**kwargs):
# 密钥文件
key_file = kwargs['key_file']
# 密钥文件绝对路径
path = real_file_path('/common/static/rsa/' + key_file)
with open(path) as f:
data = f.read()
key = RSA.importKey(data)
return key
# 用公钥加密
def encrypt_data(**kwargs):
# 待加密信息
msg = kwargs['msg']
# 获取密钥
public_key = get_key(key_file='rsa_public_key.pem')
cipher = PKCS1_cipher.new(public_key)
encrypt_text = base64.b64encode(cipher.encrypt(bytes(msg.encode("utf8"))))
return encrypt_text.decode('utf-8')
# 用私钥解密
def decrypt_data(**kwargs):
# 待加密信息
encrypt_msg = kwargs['encrypt_msg']
# 获取密钥
private_key = get_key(key_file='rsa_private_key.pem')
cipher = PKCS1_cipher.new(private_key)
back_text = cipher.decrypt(base64.b64decode(encrypt_msg), 0)
return back_text.decode('utf-8')
# 检验
def check_encrypt_decrypt(**kwargs):
msg = kwargs['msg']
decrypt_msg = decrypt_data(encrypt_msg=kwargs['encrypt_msg'])
if msg == decrypt_msg:
return True
else:
return False

View File

@ -2,6 +2,7 @@ import os
import json
import functools
from uuid import uuid4
from flask import request
from setting import APP_NAME, API_SECRET
@ -61,3 +62,25 @@ def sub_dict(param1, param2):
子集
"""
return dict((key, value) for key, value in param1.items() if key in param2)
def make_id():
"""
简化32位uuid为8位id
Parameters:
-
Returns:
result: 8位ID
"""
uuid_chars = ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
uuid = str(uuid4()).replace('-', '')
res = ''
for i in range(0, 8):
sub = uuid[i * 4: i * 4 + 4]
x = int(sub, 16)
res += uuid_chars[x % 0x3E]
return res

View File

@ -0,0 +1,29 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE6TAbBgkqhkiG9w0BBQMwDgQI5eJVVE2oODwCAggABIIEyKh/fgkXOuWAX7bo
m0qYabhi3roFbIsMVADgaEqdRhcxL7a1bQTdZhyMh0GNx36kL6kZyCLkBkzQAh/A
yQ/7rEGdKMApY6QKlkHEM797UK49c1B3v21NPNHgpzkfGa8xNqIsJSolt1IZSEdN
lx93k+oKMr37H7gLBTf9o3WkawXAd6Qd8RGstKbrHMgwsiHq3UTRBLLc3xrRDLi7
cR9bqzwGBTXBP6UGNSGQPy4jOF9BtSxxSefrEve5aSTI6nigkyeqcY2BzeYCXr//
vcvEAg8xjjP76S0h0b3xSLwc3co8aZI5kz7aEZO7BocxVntZswtzpAY+dkMX3ef7
RiRj41gOboEXfYSi5gfhSXWs2ac/poROfaIN5NVs3JXSHMRAwV/sdbNIhIgenfZ1
WuTFU7kBLt7FgNJmmhCvqyfH5oz1ncL38X+XtFrGnu7PTxGx+OuvZydqMk3gkCjy
5avOExoIPdokIp5jHss96V95RqYhySq+iWvdxFTdZTOmgdMfcgkFh1tUq+nzDBnT
BQVk8aasO5lTs670qLTrpGN2D67V0uFsqSqUkW07oc8ZuBLHkCGkjVRUsYERcKLy
TKyxajxs91rE1D4ojRG+X+ThwOlg2UsxXxLC3t/AMlN2nt5SK6popSv6Z3gVKjkO
6UMXw8ip8iQ0GWS9IHrxb6xSXWN8ELoMyDkN6O/uI86xEx/3+t0E95nPUYddIbtJ
zqrGAMZLiDOwb/WW3o9O+dwkqpgzQESLF6klQLaTpIMExKgU0pvKtwzE8kQX0ZnW
wAkCpTQB68TQIXJhmhNwErupXLQXHrdOt3TCRjVgtcFLD5Z5MmyfECk3ugfRd2Oz
zLMwkOMyXn+/Wu8xYIiOq0FdRrZGaFEIo5gkLtgYD1jqJztRct7BTH2lMUqHHy5e
GpA3dTXjGdypcIU3AY4OOmOfISdQnd2AQ56Z30oRIwVmGhNtYT11kq5/DPgxV2M+
F8TBVLHQhLuN23wLS32t2Yz3ZvPiCM4dE+983PkGnBMx1wPCfY8PwxVirhS+O53U
jndVJutJB/7h0iBLhpQIGlLl8a9tsY7inInEeTwjSBVyzKkR3UWn4EJKUsa4+yeO
AgZroykVZb+uvAkc1phz5XzQ7jRZQW9NuGHdWkdQs+EBYrg03siba9DDChNzz9cC
Hcj32kidCYD5GyxTBp6Pe9TiCqorJHoxdoeZNnswOcIfUt0lowi0VdoiY+Rha8J+
hNfzggPiDRPCZt4kWG9M1Jlup5SLjPW4KEK0yZr3dNiFoxvadh/HSzAFDEAQxs5r
o4P6Yo7EcY5Htb5suxUb/cEoz5aqczSwld+JirpxHOaLrRhDwBVp6MN+a3LUZF33
ukYzG9jmTD2d3UPRogIeixl6bbY7NlXEinLTGqaSX/TQLiS569XlcWIgQIybxmPm
DZYAbue4IYuCxZlXn5xT1pt86cQC5yXIlCL0C35ZYGaqJg/8xq1j78CTOgrrD+/D
OcAItL1bZOytwH8eiB4A2A24RXMTIDRiF2Fv/XO9K2ZlnX20s0M2ism1HPmk252W
jdeWp9i+KQXhcFd583tBDS+Cg58RcH7icIj22AXXNhV+/OKs1pokbmR2+603p5ZW
A5fshckye1hPUbBS4w==
-----END ENCRYPTED PRIVATE KEY-----

View File

@ -0,0 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsF1jbjOSGhf+IOwvsXpU
EKrJMqckHonBJnBa3rV1nHYJmHRniIkJpqUsHROHD2jZVrIGUU8t5Sg4ETCFhIlT
PWg5l7/8i/AWzqaCDoT22Iyx/9zXaCZvMhJ1VhRWyG8H7iCXM85kJ/Pok2U1In1E
YCXacR7/AcGyUSFq++aUo2S9g2oVNOhU05rZbU/vuPPi/GuIWEZWPnHKna3z1lKB
vV84/yPSdsPntvjoXRme+dFOiVeHGsQIRjVtFCHwDg2oOpvy49AaaiH7uvtdkIoL
zXA9CAVAmmq0jA02ko7ldRpvWb6pc6xp79js9u2i4oFFY5/9puSeD2AeLhWOhZrl
gwIDAQAB
-----END PUBLIC KEY-----

0
menus/__init__.py Normal file
View File

View File

@ -4,6 +4,11 @@ class User:
def __init__(self):
self.uid = None
self.email = None
self.name = None
self.pwd = None
self.role = None
self.menus = None
self.group = None
def create_user(self):
pass

View File

@ -0,0 +1,17 @@
import pymongo
client = pymongo.MongoClient('mongodb://{}:{}@{}:{}'.format('root', 'RYIHrqml#LSW6#!*', '116.63.130.34', 27020))
def find_user_info(param):
"""
查询用户信息
Parameters:
param: 查询条件
Returns:
record: 记录
"""
collection = client['用户']['用户信息']
data = collection.find(param, {'_id': False})
record = list(data)
return record

View File

@ -0,0 +1,90 @@
import re
import time
from werkzeug.security import generate_password_hash
from common.rsa import decrypt_data
from common.scripts import read_json_file, make_id
from user.db import find_user_info
def check_mail_fmt(email):
"""
邮箱地址格式校验
Parameters:
email: 邮箱
Returns:
result: 邮箱校验结果正确返回True不正确返回False
"""
regex = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"
case = (len(email) > 7) and (re.match(regex, email) is not None)
result = True if case else False
return result
def check_pwd_fmt(pwd):
"""
密码强度校验
Parameters:
pwd: 密码已加密
Returns:
result: 密码强度校验结果正确返回True不正确返回False
"""
try:
password = decrypt_data(encrypt_msg=pwd)
except Exception:
return False
regex = "^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)^.{8,}$"
case = (len(password) >= 8) and (re.match(regex, password) is not None)
result = True if case else False
return result
def gen_new_uid():
"""
生成新的用户ID如果该ID存在则重新生成
Parameters:
-
Returns:
new_id: 生成的用户ID
"""
# 生成新ID
new_id = make_id()
# 检查新ID是否存在如果存在则继续生成新ID
case = find_user_info({"企业ID": new_id}) is []
while case:
new_id = make_id()
# 新ID可使用返回新ID
return new_id
def create_user_scripts(email, name, pwd, role, group):
"""
Notes
Parameters:
email: desc
name: desc
pwd: desc
role: desc
group: desc
Returns:
res: desc
"""
if not check_mail_fmt(email):
return False
if not check_pwd_fmt(pwd):
return False
user = read_json_file('/user/static/db_design/user.json')
user['UID'] = gen_new_uid()
user['email'] = email
user['name'] = name
user['pwd'] = generate_password_hash(decrypt_data(encrypt_msg=pwd))
user['role'] = role
user['group'] = group
user['create_time'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

5
user/setting.py Normal file
View File

@ -0,0 +1,5 @@
# 数据库设置
DB_USER = 'root'
DB_PWD = 'RYIHrqml#LSW6#!*'
DB_HOST = '116.63.130.34'
DB_PORT = 27020

View File

@ -1,6 +1,10 @@
{
"UID": null,
"email": null,
"pwd": null,
"name": null,
"status": null,
"role": null,
"menus": null
"group": null,
"create_time": null
}