82 lines
2.2 KiB
Python
82 lines
2.2 KiB
Python
import os
|
||
import re
|
||
import base64
|
||
|
||
from Crypto.PublicKey import RSA
|
||
from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher
|
||
|
||
|
||
def encrypt_data(**kwargs):
|
||
"""
|
||
用公钥加密
|
||
Parameters:
|
||
msg str 待加密信息
|
||
Returns:
|
||
加密后结果
|
||
"""
|
||
msg = kwargs['msg'] # 待加密信息
|
||
|
||
with open(os.path.abspath(os.path.dirname(__file__)+'/static/rsa_public_key.pem')) as f:
|
||
data = f.read()
|
||
public_key = RSA.importKey(data)
|
||
|
||
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):
|
||
"""
|
||
用私钥解密
|
||
Parameters:
|
||
encrypt_msg str 加密信息
|
||
Returns:
|
||
执行正确 解密后结果
|
||
执行错误 False
|
||
"""
|
||
try:
|
||
encrypt_msg = kwargs['encrypt_msg'] # 加密信息
|
||
|
||
with open(os.path.abspath(os.path.dirname(__file__)+'/static/rsa_private_key.pem')) as f:
|
||
data = f.read()
|
||
private_key = RSA.importKey(data)
|
||
|
||
cipher = PKCS1_cipher.new(private_key)
|
||
back_text = cipher.decrypt(base64.b64decode(encrypt_msg), 0)
|
||
return back_text.decode('utf-8')
|
||
except Exception:
|
||
return False
|
||
|
||
|
||
def check_mail_fmt(email):
|
||
"""
|
||
邮箱地址格式校验,仅允许@fecr.com.cn
|
||
Parameters:
|
||
email: 邮箱
|
||
Returns:
|
||
result: 邮箱校验结果,正确返回True,不正确返回False
|
||
"""
|
||
# regex = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"
|
||
regex = "^.+\\@fecr.com.cn"
|
||
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
|
||
"""
|
||
password = decrypt_data(encrypt_msg=pwd)
|
||
if not password:
|
||
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
|