Python——hashlib&hmac(加密模块)
bytes类型数据——通过heashlib算法——固定长度的字符串。
核对两个文件是否相同,一般都使用MD5,而sha1是用于进行数据加密使用。(使用方法一样,就是md5改成sha1)
主要用于对字符串的加密,最常用的为MD5加密:
1 2 3 4 5 6 7 8 9 | import hashlib def get_md5(data): obj = hashlib.md5() obj.update(data.encode( 'utf-8' )) result = obj.hexdigest() return result val = get_md5( '123' ) #这里放入要加密的字符串文字。 print (val) |
1 2 3 | #简便的写法: pwd = input ( '请输入密码:' ).encode( 'utf-8' ) result = hashlib.md5(pwd).hexdigest() |
1 2 3 4 5 | #加盐写法: import hashlib date = 'hahahah' ojb = hashlib.md5((date + '123123123' ).encode( 'utf-8' )).hexdigest() print (ojb) |
1 2 3 4 5 6 7 8 9 10 11 12 | import hashlib md5 = hashlib.md5() md5.update( 'Hello' .encode()) print (md5.hexdigest()) md5 = hashlib.md5() md5.update( 'He' .encode()) md5.update( 'llo' .encode()) print (md5.hexdigest()) #这两个结果是一样的。不过update多少次。只要数据不变,那么都是一样的 |
如果要避免撞库的行为,可以加盐将加密数值改为更加复杂的,这样破译起来更加不容易。
1 2 3 4 5 6 7 8 9 | import hashlib def get_md5(data): obj = hashlib.md5( 'abclasjd;flasdkfhowheofwa123113' .encode( 'utf-8' )) #这里加盐 obj.update(data.encode( 'utf-8' )) result = obj.hexdigest() return result val = get_md5( '123' ) #这里放入要加密的字符串文字。 print (val) |
将大文件进行提取并使用hash取值方式:
1 2 3 4 5 6 7 8 9 10 11 12 | import hashlib def file_check(file_path): with open (file_path,mode = 'rb' ) as f1: shu256 = hashlib.sha256() while 1 : content = f1.read( 1024 ) if content: shu256.update(content) else : return shu256.hexdigest() print (file_check( 'test.exe' )) |
案例:
说明:用户输入新建的用户名和密码,以MD5加密的形式存入文件中。再让用户输入用户名密码进行匹配。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #!/usr/bin/env python # _*_ coding=utf-8 _*_ import hashlib def get_md5(data): ''' 登录加密,将传入的密码进行加密处理,并返回值。 :param data: 用户的密码 :return: 返回MD5加密后的密码 ''' obj = hashlib.md5( 'abclasjd;flasdkfhowheofwa123113' .encode( 'utf-8' )) #这里加盐 obj.update(data.encode( 'utf-8' )) result = obj.hexdigest() return result def seve_user(username,password): ''' 将加密后的密码和用户名进行保存,以| 来分割,文件为test.txt :param username: 需要创建的用户名 :param password: MD5后的密码 :return: 需要更改的地方,return判断是否保存成功。 ''' user_list = [username,get_md5(password)] lis = '|' .join(user_list) with open ( 'test.txt' ,encoding = 'utf-8' ,mode = 'a' )as f: f.write(lis + '\n' ) def read_user(username,password): ''' 来判断用户登录所输入的用户名和是否正确。 :param username: 用户输入的用户名 :param password: MD5加密后的密码 :return: 如果匹配返回True ''' with open ( 'test.txt' ,mode = 'r' ,encoding = 'utf-8' ) as f: for item in f: infomation = item.strip() user,pwd = infomation.split( '|' ) if username = = user and password = = pwd: return True while True : ''' 循环需要创建的用户 ''' user = input ( '请输入用户名:' ) if user.upper() = = 'N' : break pwd = input ( '请输入密码:' ) if len (user) and len (pwd) < 8 : print ( '用户名密码不符合要求,请重新输入。' ) else : seve_user(user,pwd) while True : ''' 循环用户登录 ''' user_name = input ( '请输入用户名:' ) password = input ( '请输入密码:' ) start_user = read_user(user_name,get_md5(password)) if start_user: print ( '登录成功' ) break else : print ( '登录失败' ) |
hmac
可以简化生成秘钥的过程,在进行有效性检测时可以使用。
1 2 3 4 5 6 7 8 9 10 | import os import hmac random_key = os.urandom( 32 ) #随机生成的一个32字节 keys = b 'hahaha' #key h = hmac.new(keys,random_key, 'md5' ).digest() print (h) #b"\xd5w\xd2jr]\\]Qgh!\xff'h\xc7" |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)