当前位置:网站首页>关于密码加密的一点思路
关于密码加密的一点思路
2022-08-02 14:01:00 【意大利面拌42号混凝土】
关于密码加密的一点思路
如何在数据库被劫持代码泄露的情况下,用户密码依然不会被破解呢
带着这个问题我书写了一下代码
from hashlib import sha256, sha512
test_pwd = 'testpassword123'
class CipherHandler(object):
""" 密码加密与密码比对 """
# 密码盐
salt = "cvbjd%*vfjkse#fuei"
@classmethod
def encrypt(cls, pwd: str) -> str:
""" 先随机加盐,再用两次sha256/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'))
边栏推荐
猜你喜欢
劲爆!阿里巴巴面试参考指南(嵩山版)开源分享,程序员面试必刷
软件测试和硬件测试的区别及概念
Some impressions of the 519 plummet 2021-05-21
世界上最大的开源基金会 Apache 是如何运作的?
网络安全第五次作业
The world's largest Apache open source foundation is how it works?
RHCE第一天作业
Break the limit of file locks and use storage power to help enterprises grow new momentum
保姆级教程:写出自己的移动应用和小程序(篇三)
Interview | with questions to learn, Apache DolphinScheduler Wang Fuzheng
随机推荐
目标检测场景SSD-Mobilenetv1-FPN
xshell连接虚拟机步骤_建立主机与vm虚拟机的网络连接
Object detection scene SSD-Mobilenetv1-FPN
ping命令的使用及代码_通过命令查看ping路径
els 长条方块变形条件、边界碰撞判定
鲲鹏devkit & boostkit
Sentinel源码(三)slot解析
一维卷积神经网络_卷积神经网络的基础知识「建议收藏」
SQL函数 UNIX_TIMESTAMP
微信小程序如何实现支付功能?看官方文档头疼(使用云函数的方式操作)「建议收藏」
Awesome!Alibaba interview reference guide (Songshan version) open source sharing, programmer interview must brush
劲爆!阿里巴巴面试参考指南(嵩山版)开源分享,程序员面试必刷
面试SQL语句,学会这些就够了!!!
Detailed explanation of ORACLE expdp/impdp
What is the difference between web testing and app testing?
rust使用mysql插入数据
第二讲 软件生命周期
idea社区版下载安装教程_安装天然气管道的流程
Raft协议图解,缺陷以及优化
shell脚本“画画”