1.优化Base64算法,增加异常捕获

2.调整auth所有接口为base64加密存储
3.修复无法获取token的问题
This commit is contained in:
jayhgq 2024-09-16 00:08:13 +08:00
parent 32e82441c2
commit 7bf39c83bd
5 changed files with 74 additions and 22 deletions

View File

@ -1,3 +1,6 @@
import re
class CaesarCypherClass: class CaesarCypherClass:
""" """
恺撒密码提供以恺撒密码方法进行加密及解密的方法加密方法使用CaesarEncode()函数解密方法使用CaesarDecode()函数 恺撒密码提供以恺撒密码方法进行加密及解密的方法加密方法使用CaesarEncode()函数解密方法使用CaesarDecode()函数
@ -51,21 +54,49 @@ class Base64CypherClass:
""" """
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
"""
Base64类初始化函数
:param args:
:param kwargs:
"""
import importlib import importlib
self.base64 = importlib.import_module('base64') self.base64 = importlib.import_module('base64')
self.os = importlib.import_module('os') self.os = importlib.import_module('os')
self.time = importlib.import_module('time') self.time = importlib.import_module('time')
self.re = importlib.import_module('re')
@staticmethod @staticmethod
def base64_encode_str(self, s): def base64_encode_str(self, s):
"""
Base64字符串加密
:param self:
:param s: 要加密的字符串
:return: 加密后的字符串
"""
return self.base64.b64encode(s.encode('utf-8')) return self.base64.b64encode(s.encode('utf-8'))
@staticmethod @staticmethod
def base64_decode_str(self, s): def base64_decode_str(self, s):
"""
Base64字符串解密解密前先判断是否为Base64加密方式
:param self:
:param s: 要解密的字符串
:return: 解密后的字符串
"""
try:
self.base64.b64decode(s)
return self.base64.b64decode(s).decode('utf-8') return self.base64.b64decode(s).decode('utf-8')
except Exception as e:
return f"base64解密失败请确定加密方式是否正确。错误信息{e}"
@staticmethod @staticmethod
def base64_encode_pic(self, pic): def base64_encode_pic(self, pic):
"""
Base64加密图片路径不存在则返回"图片路径不存在"
:param self:
:param pic: 要加密的图片路径
:return: 返回加密的base64字符
"""
if self.os.path.exists(pic): if self.os.path.exists(pic):
with open(pic, 'rb') as f: with open(pic, 'rb') as f:
read_pic = open(pic, 'rb') read_pic = open(pic, 'rb')
@ -77,9 +108,19 @@ class Base64CypherClass:
@staticmethod @staticmethod
def base64_decode_pic(self, pic_bs64): def base64_decode_pic(self, pic_bs64):
if self.os.path.exists(f"upload/temp/pic{int(self.time.time())}.jpg"): """
self.os.remove(f"upload/temp/pic{int(self.time.time())}.jpg") Base64解密图片
with open(f"upload/temp/pic{int(self.time.time())}.jpg", 'wb') as f: :param self:
:param pic_bs64:
:return: 返回图片路径
"""
pic_path = f"upload/temp/pic{int(self.time.time())}"
if self.os.path.exists(f"{pic_path}.jpg"):
self.os.remove(f"{pic_path}.jpg")
elif not self.os.path.exists("upload/temp/pic"):
self.os.path.mkdir("upload/temp/pic")
with open(f"{pic_path}.jpg", 'wb') as f:
f.write(self.base64.b64decode(pic_bs64)) f.write(self.base64.b64decode(pic_bs64))
return 'upload/temp/pic.jpg' return f"{pic_path}.jpg"

View File

@ -2,7 +2,7 @@ from django.urls import path
from apps.auth import views from apps.auth import views
urlpatterns = [ urlpatterns = [
path("gettoken/", views.get_token, name="getToken"), path("gettoken/", views.gettoken, name="getToken"),
path("searchuser/", views.search_user, name="searchuser"), path("searchuser/", views.search_user, name="searchuser"),
path("adduser/", views.add_user, name="addUser"), path("adduser/", views.add_user, name="addUser"),
path("login/", views.login_user, name="loginUser"), path("login/", views.login_user, name="loginUser"),

View File

@ -1,15 +1,19 @@
import binascii import binascii
import json, datetime, base64 import json, datetime
from django.shortcuts import HttpResponse from django.shortcuts import HttpResponse
from django.middleware.csrf import get_token from django.middleware.csrf import get_token
from django.views.decorators.http import require_GET, require_POST from django.views.decorators.http import require_GET, require_POST
from apps.auth import models as auth_models from apps.auth import models as auth_models
from django.contrib.auth.hashers import make_password, check_password from django.contrib.auth.hashers import make_password, check_password
from apps.api.common import CaesarCypherClass, Base64CypherClass
# Create your views here. # Create your views here.
base64 = Base64CypherClass()
@require_GET @require_GET
def get_token(request): def gettoken(request):
""" """
获取token 获取token
:param request: :param request:
@ -26,12 +30,12 @@ def search_user(request):
:param request: :param request:
:return: :return:
""" """
username = request.POST.get('username') username = base64.base64_encode_str(base64, request.POST.get("username")).decode('utf-8')
user = auth_models.User.objects.filter(username=username) user = auth_models.User.objects.filter(username=username)
if user.exists(): if user.exists():
return HttpResponse("用户名已存在")
else:
return HttpResponse(True) return HttpResponse(True)
else:
return HttpResponse(False)
@require_POST @require_POST
@ -42,11 +46,12 @@ def add_user(request):
:return: 注册结果 :return: 注册结果
""" """
try: try:
username = request.POST.get("username") username = base64.base64_encode_str(base64, request.POST.get("username")).decode('utf-8')
pwd_base64 = base64.b64encode(request.POST.get("pwd")) pwd_base64 = base64.base64_decode_str(base64, request.POST.get("pwd"))
print(username, pwd_base64)
pwd = make_password(pwd_base64) pwd = make_password(pwd_base64)
email = request.POST.get("email") email = base64.base64_encode_str(base64, request.POST.get("email")).decode('utf-8')
phone = request.POST.get("phone") phone = base64.base64_encode_str(base64, request.POST.get("phone")).decode('utf-8')
create_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") create_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
last_login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") last_login_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(username, pwd, email, phone) print(username, pwd, email, phone)
@ -73,8 +78,8 @@ def login_user(request):
:return: :return:
""" """
try: try:
username = request.POST.get("username") username = base64.base64_encode_str(base64, request.POST.get("username")).decode('utf-8')
pwd_input = base64.b64decode(request.POST.get("pwd")) pwd_input = base64.base64_decode_str(base64, request.POST.get("pwd"))
pwd_made = auth_models.User.objects.filter(username=username).first().pwd pwd_made = auth_models.User.objects.filter(username=username).first().pwd
pwd = check_password(pwd_input, pwd_made) pwd = check_password(pwd_input, pwd_made)
if pwd: if pwd:

View File

@ -6,9 +6,15 @@ from apps.api.common import CaesarCypherClass, Base64CypherClass
def home(request): def home(request):
bs64 = Base64CypherClass() bs64 = Base64CypherClass()
s = request.GET.get('s') s = request.GET.get('s')
s_encode = bs64.base64_encode_pic(bs64, s) print(s)
if s_encode != "图片路径不存在": s_encode = bs64.base64_encode_str(bs64,s)
s_decode = bs64.base64_decode_pic(bs64, s_encode) print(s_encode)
else: s_decode = bs64.base64_decode_str(bs64,s)
s_decode = ''
# s_encode = bs64.base64_encode_pic(bs64, s)
# if s_encode != "图片路径不存在":
# s_decode = bs64.base64_decode_pic(bs64, s_encode)
# else:
# s_decode = ''
# return HttpResponse(f"解密:{s_decode}")
return HttpResponse(f"加密:{s_encode}\n解密:{s_decode}") return HttpResponse(f"加密:{s_encode}\n解密:{s_decode}")

Binary file not shown.