当前位置:网站首页>A little thought about password encryption
A little thought about password encryption
2022-08-02 14:21:00 【Spaghetti Mixed with No. 42 Concrete】
A little thought on password encryption
How in the case that the database is leaked by the hijacking code,The user password will still not be cracked
With this question in mind, I wrote some code
from hashlib import sha256, sha512
test_pwd = 'testpassword123'
class CipherHandler(object):
""" Password encryption and password comparison """
# 密码盐
salt = "cvbjd%*vfjkse#fuei"
@classmethod
def encrypt(cls, pwd: str) -> str:
""" Randomly add salt first,use it twicesha256/sha512加密 :return: """
import random
randnum = random.randint(1, 3)
if randnum == 1:
salt_pwd = ''.join([cls.salt, pwd])
return cls._encryption(salt_pwd)
elif randnum == 2:
salt_pwd = ''.join([pwd, cls.salt])
return cls._encryption(salt_pwd)
elif randnum == 3:
pwd_list = list(pwd)
pwd_list.insert(randnum, cls.salt)
salt_pwd = ''.join(pwd_list)
return cls._encryption(salt_pwd)
@classmethod
def compare(cls, user_input_pwd: str,
database_storage_pwd: str
) -> bool:
""" 加密比对 :return: """
pwd_list = []
salt_pwd_one = ''.join([cls.salt, user_input_pwd])
pwd_list.append(cls._encryption(salt_pwd_one))
salt_pwd_two = ''.join([user_input_pwd, cls.salt])
pwd_list.append(cls._encryption(salt_pwd_two))
str_list = list(user_input_pwd)
str_list.insert(3, cls.salt)
salt_pwd_three = ''.join(str_list)
pwd_list.append(cls._encryption(salt_pwd_three))
if database_storage_pwd not in pwd_list:
return False
return True
@classmethod
def _encryption(cls, salt_pwd: str) -> str:
one_encryption = sha512((salt_pwd).encode('utf-8')).hexdigest()
enc_pwd = sha512((one_encryption).encode('utf-8')).hexdigest()
return enc_pwd
# 加密
print(CipherHandler.encrypt(test_pwd))
# 校验比对
print(CipherHandler.compare(test_pwd,'32b5b701ece1747eb90935fa55fe96983126a9683dbb1a537750fe5527eb3552ce13d31e2d2fad07fd8fe755794973221404e3a528dfa74ff0aff93e8b6745c6'))
边栏推荐
- Sentinel源码(三)slot解析
- Data Organization---Chapter 6 Diagram---Graph Traversal---Multiple Choice Questions
- The 2nd China Rust Developers Conference (RustChinaConf 2021~2022) Online Conference Officially Opens Registration
- drf路由组件Routers
- MySQL数据库设计规范
- Flask-RESTful请求响应与SQLAlchemy基础
- 网络剪枝(1)
- 第四单元 路由层
- [ROS](05)ROS通信 —— 节点,Nodes & Master
- redis分布式锁和看门狗的实现
猜你喜欢
随机推荐
Flask框架
yolov5,yolov4,yolov3 mess
Paddle window10 environment using conda installation
Flask项目的完整创建 七牛云与容联云
Flask-SQLAlchemy
Unit 11 Serializers
[ROS](04)package.xml详解
YOLOv7使用云GPU训练自己的数据集
window10 lower semi-automatic labeling
Unit 5 Hold Status
redis分布式锁和看门狗的实现
鼠标右键菜单栏太长如何减少
chapter6可视化(不想看版)
网页设计(新手入门)[通俗易懂]
[ROS] (04) Detailed explanation of package.xml
What are the file encryption software?Keep your files safe
yolov5 improvement (1) Add attention focus mechanism
第六单元 初识ORM
Haystack的介绍和使用
【ROS】工控机的软件包不编译