关于hashlib哈希算法的一些个人笔记

关于hashlib哈希算法的一些个人笔记摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。hashlib提供了常见的摘要算法,具体包括md5、sha1、sha224、sha256、sha512等,我们一般用的比较多是md5。注意加密是单向的。通过hashlib,可以把任意长度的字符串转换成固定长度的加密串,通常我们一般用hexdigest(),也就是…

大家好,又见面了,我是你们的朋友全栈君。

摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
hashlib提供了常见的摘要算法,具体包括md5、sha1、sha224、sha256、sha512等,我们一般用的比较多是md5。注意加密是单向的。

通过hashlib,可以把任意长度的字符串转换成固定长度的加密串,通常我们一般用hexdigest(),也就是十六进制数据字符串的值来表示。
下面是一段简单的代码示例:

import hashlib

def md5(str):
    md5 = hashlib.md5()
    md5.update(str)
    ##return md5.digest() # 返回摘要,作为二进制数据字符串值
    return md5.hexdigest()   # 返回摘要,作为十六进制数据字符串值

if __name__ == "__main__":
    str = "abcdefg"
    str = str.encode("utf8") # 
    print(md5(str))

返回一个十六进制的固定长度字符串,结果如下:

e2fc714c4727ee9395f324cd2e7f331f

如果用的是digest(),则会返回一个二进制的,结果如下:

b"\xe2\xfcqLG'\xee\x93\x95\xf3$\xcd.\x7f3\x1f"

如果我们改变str中的任意字符,结果会发生很大的变化。

注意一点:python3中,字符串默认的都是unicode,所以需要先encode到utf8,否则会报错类似于下面这个错误:

Unicode-objects must be encoded before hashing

由于是单向加密,通常可以用来保存一些内部信息到数据库中,比如用户名密码这一类。因为是单向的,所以不能用于加密解密,只适合于防篡改,或者验证用户密码等。

我们也可以通过把登录名作为Salt的一部分来计算MD5,这样不容易被其他人通过MD5反推明文口令:

def get_md5(user, passwd):
    if isinstance(url, str):
        url = url.encode("utf8")
    m = hashlib.md5()
    m.update(user + passwd)
    return m.hexdigest()


if __name__ == "__main__":
    user = "root"
    passwd = "password"
    print(get_md5(user, passwd))

注意中间我加了if判断,以便于做unicode的转换。在python3中,已经没有unicode这种类型,str就是unicode。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136692.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月3日 上午8:36
下一篇 2022年6月3日 上午8:36


相关推荐

  • 计算机xp考试模块,职称计算机考试XP模块题库

    计算机xp考试模块,职称计算机考试XP模块题库一、WindowsXP的特点、启动和退出1、要求:将你的计算机转入待机状态:开始→关闭计算机→待机2、要求:重新启动你的计算机:开始→关闭计算机→重新启动3、要求:正常退出WindowsXP系统:开始→关闭计算机→关闭4、要求:切换当前用户为DCH:开始→注销→切换用户→点“DCH已登录”5、要求:对当前用户进行注销:开始→注销→注销二、Windows的界面(一)1、要求:利用“索引”查找关于…

    2022年6月2日
    36
  • wamp下Apache2.4.x 配置httpd.conf允许外部访问

    wamp下Apache2.4.x 配置httpd.conf允许外部访问

    2021年9月12日
    47
  • mysql insert or replace_dbinsert

    mysql insert or replace_dbinsert通常情况下insert语句的写法为insertintotablenamevalues(a,b);区别之处:1oracle中使用如下语句1.1方式一该方式特点是能插如值是固定的多条数据insertallintotest01values(1,’a’)intotest01values(2,’b’)select1fromdual;–这一行不…

    2025年11月15日
    3
  • mse均方误差计算公式_视觉SLAM十四讲实践之真实轨迹和估计轨迹均方根误差「建议收藏」

    mse均方误差计算公式_视觉SLAM十四讲实践之真实轨迹和估计轨迹均方根误差「建议收藏」为了理解RMSE首先介绍一些统计学的概念,然后介绍SLAM领域里面的计算精度ATE和RPE的用法。中位数一组数据按大小顺序排列,位于最中间的一个数据(当有偶数个数据时,为最中间两个数据的平均数)叫做这组数据的中位数。用中位数作为一组数据的代表,可靠性不高,但受极端数据影响的可能性小一些,有利于表达这组数据的“集中趋势”。众数几组数据中出现次数最多的那个数据,叫做这批数据的众数。用众…

    2026年4月19日
    5
  • ADB命令安装APK常见错误总结「建议收藏」

    ADB命令安装APK常见错误总结「建议收藏」通过adb命令安装应用过程:常见问题以及原因:Failure[INSTALL_FAILED_ALREADY_EXISTS]:应用已经存在,需要卸载设备中现有的。:没有找到设备,查看是否开启调试,或者数据线有问题Failure[INSTALL_FAILED_UPDATE_INCOMPATIBLE]:版本不能共存,可能使用了相同版…

    2022年6月8日
    69
  • 树莓派能做什么?如何使用树莓派[通俗易懂]

    树莓派能做什么?如何使用树莓派[通俗易懂]我们知道树莓派是最常用的开发板,树莓派受欢迎的原因之一在于树莓派的功能非常全面,不论是做视频播放、音频播放等功能,树莓派都能派上用场。为增进大家对树莓派的认识,本文将带大家了解一下曾有人用树莓派做了什么。如果你对树莓派具有兴趣,不妨继续往下阅读哦。1、无线热点这大概是地球人拿来干的最多的一件——插上网线和USB无线网卡,配置之后就可以作为一个无线热点。2、机械假肢MITMediaLab的研究员把它作为机械假肢的控制器。3、简易自制笔记本把树莓派跟LCD液晶面板连上,再加上鼠标键盘

    2022年6月10日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号