热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

22.python全栈之路:hashlib模块

hashlib1.常见的几种加密方法及其使用方法:importhashlib#md5hashhashlib.md5()hash.update(bytes(admin,encoding

hashlib

1.常见的几种加密方法及其使用方法:

import hashlib

# md5
hash = hashlib.md5()
hash.update(bytes('admin', encoding='utf-8'))
print(hash.hexdigest())
print(hash.digest())
'''
21232f297a57a5a743894a0e4a801fc3
b'!#/)zW\xa5\xa7C\x89J\x0eJ\x80\x1f\xc3'
'''

# sha1
hash = hashlib.sha1()
hash.update(bytes('1', encoding='utf-8'))
print(hash.hexdigest())
'''
356a192b7913b04c54574d18c28d46e6395428ab
'''

# sha256
hash = hashlib.sha256()
hash.update(bytes('1', encoding='utf-8'))
print(hash.hexdigest())
'''
6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b
'''

# sha384
hash = hashlib.sha384()
hash.update(bytes('1', encoding='utf-8'))
print(hash.hexdigest())
'''
47f05d367b0c32e438fb63e6cf4a5f35c2aa2f90dc7543f8a41a0f95ce8a40a313ab5cf36134a2068c4c969cb50db776
'''

# sha512
hash = hashlib.sha512()
hash.update(bytes('1', encoding='utf-8'))
print(hash.hexdigest())
'''
4dff4ea340f0a823f15d3f4f01ab62eae0e5da579ccb851f8db9dfe84c58b2b37b89903a740e1ee172da793a6e79d560e5f7f9bd058a12a280433ed6fa46510a
'''

 缺陷:因为每台电脑都可以进行加密,有些机器会一直运算产生密文映射库

    所以以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。

    因此,有必要对加密算法中添加自定义key再来做加密。

import hashlib

# md5
hash = hashlib.md5()
hash = hashlib.md5(bytes('自己定义的口味', encoding='utf-8'))
hash.update(bytes('1', encoding='utf-8'))
print(hash.hexdigest())
'''
0bdd27adb563c7c3198b00de20a9a972
'''

注意事项:加密算法无法直接对一个字符或者字符串加密,我们必须这些字符串转换成bytes类型再进行加密

 

课后拓展:将之前的用户登录程序,拓展成一个可以安全的,给用户密码加密的程序

import hashlib


def md5(arg):
ooo = hashlib.md5(bytes("吴文", encoding='utf-8'))
ooo.update(bytes(arg, encoding='utf-8'))
return ooo.hexdigest()


def register(user, pwd):
with open('db', 'a', encoding='utf-8') as f:
pwd = md5(pwd)
temp = user + '|' + pwd + '\n'
f.write(temp)


def login(user, pwd):
with open('db', 'r', encoding='utf-8') as f:
for line in f:
user1, pwd1 = line.strip().split('|')
if user == user1 and md5(pwd) == pwd1:
return True


def main():
i = input("1,登录;2,注册 :")
if i == '2':
user = input("用户名:")
pwd = input("密码:")
register(user, pwd)
elif i == 1:
user = input("用户名:")
pwd = input("密码:")
if login(user, pwd):
print("登陆成功")
else:
print("登陆失败")


main()

  


推荐阅读
  • 本文介绍了一个Python函数same_set,用于判断两个相等长度的数组是否包含相同的元素。函数会忽略元素的顺序和重复次数,如果两个数组包含相同的元素,则返回1,否则返回0。文章还提供了函数的具体实现代码和样例输入输出。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文介绍了在C#中SByte类型的GetHashCode方法,该方法用于获取当前SByte实例的HashCode。给出了该方法的语法和返回值,并提供了一个示例程序演示了该方法的使用。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
author-avatar
风云变幻1892_602
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有