首页 > 编程语言 >python3常用库之哈希hashlib和hmac使用

python3常用库之哈希hashlib和hmac使用

时间:2024-10-09 16:34:08浏览次数:8  
标签:hashlib update 哈希 encode hmac md5

hashlib

import hashlib

# MD5 是最常见的哈希算法,速度很快,生成结果是固定的128 bit/16字节,通常用一个32位的16进制字符串表示。
md5 = hashlib.md5()
md5.update("hello".encode())
print(md5.hexdigest())  # 5d41402abc4b2a76b9719d911017c592

# 数据量很大时分块多次调用update(),最后计算的结果一致
md5 = hashlib.md5()
md5.update("he".encode())
md5.update("llo".encode())
print(md5.hexdigest())  # 5d41402abc4b2a76b9719d911017c592

# SHA1 是另一种常见的哈希算法,结果是160 bit/20字节,通常用一个40位的16进制字符串表示。
# 比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法不仅越慢,而且哈希长度更长。
sha1 = hashlib.sha1()
sha1.update("he".encode("utf-8"))
sha1.update("llo".encode("utf-8"))
print(sha1.hexdigest())  # aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d

hmac

# 对比数据的哈希值可以验证一段数据是否有效,例如,判断用户口令是否正确。
# 为了防止根据哈希值反推原始口令,在计算哈希的时候,不能仅针对原始输入计算,需要增加一个salt来使得相同的输入也能得到不同的哈希,这样可以增加破解的难度,例如:md5(message + salt)。
# 加salt的哈希就是:计算一段message的哈希时,根据不同口令计算出不同的哈希。要验证哈希值,必须同时提供正确的口令。
# 这实际上就是Hmac算法:Keyed-Hashing for Message Authentication。它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中。
# Python自带的hmac模块实现了标准的Hmac算法。

import hmac

key = b"secret"
h = hmac.new(key, "hello".encode(), digestmod="MD5")
print(h.hexdigest())  # bade63863c61ed0b3165806ecd6acefc

h = hmac.new(key, "he".encode(), digestmod="SHA1")
h.update("llo".encode())
print(h.hexdigest())  # 5112055c05f944f85755efc5cd8970e194e9f45b

 

标签:hashlib,update,哈希,encode,hmac,md5
From: https://www.cnblogs.com/caroline2016/p/18454590

相关文章

  • 哈希表和字符串哈希算法
    哈希哈希表(HashTable)是一种数据结构,它可以通过一个哈希函数将键(key)映射到存储位置,从而实现高效的数据查找、插入和删除操作。哈希表的特点是能够在常数时间(O(1))内完成查找和更新,前提是哈希冲突处理得当。哈希表的基本结构数组:哈希表的底层通常是一个数组,数组中的每个元......
  • 代码随想录算法训练营第六天|Day6哈希表基础
    242.有效的字母异位词题目链接/文章讲解/视频讲解:https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html思路1.暴力的解法,两层为循环,很明显时间复杂度是O(n^2)。boolisAnagram(char*s,char*t){if(......
  • Java-数据结构-Map和Set-(二)-哈希表 |ू・ω・` )
    文本目录:❄️一、哈希表:  ☑1、概念:    ☑2、冲突-概念:    ☑3、冲突-避免:     ☞1)、避免冲突-哈希函数的设计:     ☞2)、避免冲突-负载因子调节(重点):    ☑4、冲突-解决:      ➷1)、解决冲突-闭散列: ......
  • Java哈希表
    哈希主要用于快速查找、存储和比较数据。哈希的核心在于哈希函数(HashFunction),它将输入(通常称为键,key)映射到一个固定范围的输出值,这个输出值称为哈希值(HashValue)或哈希码。HashMapHashMap<Integer,String>hashmap=newHashMap<Integer,String>();增:hashmap.put(1,"......
  • 洛谷每日一题(P2580 于是他错误的点名开始了)字典树/哈希表
    原题目链接:P2580于是他错误的点名开始了-洛谷|计算机科学教育新生态(luogu.com.cn)原题目截图:思路分析:解法一:哈希表法显而易见的一种思路,我们不妨模拟一下:当教练每次点名,我作为特派员,便查看一下有没有这个学生,是不是点过了这个学生。我们查看的过程,就依赖于一张表......
  • CF2014H Robin Hood Archery(异或哈希)
    题目链接题意Alice和Bob将进行一场射击比赛题解点击查看代码#include<bits/stdc++.h>usingi64=longlong;i64seed=std::chrono::high_resolution_clock::now().time_since_epoch().count();std::mt19937_64rng(seed^std::random_device{}());constexp......
  • sha256sum文件哈希值和直接哈希字符串的哈希值不一样
    例如在文件test.txt里写入test没有换行。然后sha256sumtest.txt出来的结果是f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2test.txt但是在这个网站上http://encode.chahuo.com/输入test,然后以sha256方式哈希得到的结果是9f86d081884c7d659a2......
  • 《 C++ 修炼全景指南:十三 》为什么你的代码不够快?全面掌控 unordered_set 和 unordere
    摘要本文深入探讨了C++标准库中的两大无序容器——unordered_set和unordered_map,从底层实现、核心操作、性能优化、实际应用等多个方面进行了全面分析。首先,文章介绍了这两种容器的基本概念,说明了它们基于哈希表实现的特点,尤其是在查找、插入和删除操作上具备常数时间......
  • 14 hashlib 案例2 用户注册
    问题:无法反向解密时,我们知道密码明文吗用户注册importhashlib#1、用户注册user=input("请输入用户名:").strip()pwd=input("请输入密码:").strip()#2、加密obj=hashlib.md5('testaa'.encode('utf-8'))obj.update(pwd.encode('utf-8'))encryp......
  • 13 hashlib案例1
    此模块用于实现加密,例如:md5加密importhashlibdefrun():data='中国联通'obj=hashlib.md5()obj.update(data.encode('utf-8'))ret=obj.hexdigest()print(ret)为什么要加密#避免密码被破解wupeiqi,123alex,123eric,123wupeiqi,202c......