关于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CSS中 RGB颜色查询对照表

    CSS中 RGB颜色查询对照表颜色代码表Ⅰ #000000 #2F0000 #600030 #460046 #28004D #272727 #4D0000 #820041 #5E005E #3A006F #3C3C3C #600000 #9F0050 #750075 #4B0091

    2022年5月16日
    34
  • java找不到jdk文件_java运行时系统找不到指定的文件

    java找不到jdk文件_java运行时系统找不到指定的文件学习jni的时候,javacHelloworld.java生成Helloworld.class文件以后,调用javahHelloworld提示找不到类文件由于javah以后生成的.h文件需要包名+类名,所以必须在包括全包名的目录下执行javah命令,也就是项目\src\在或者项目\bin\classe\下执行javah包名.类名的命令,比如:在src下或者classe文件夹下执

    2022年9月24日
    0
  • 三元运算符用法_三元运算符判断三个值

    三元运算符用法_三元运算符判断三个值一、三元运算符条件运算符(?:)也称为三元条件运算符,用于计算布尔表达式,并根据布尔表达式的计算结果为true还是false来返回(使用三元运算符可以简化If…else)。二、三元运算符语法判断条件?:结果1,结果2三、示例比如判断结果0是男生,否则是女生:①使用if…else编写stringresult=null;if(sexValue==0){result=”男”;}else{result=”女”;…

    2022年9月1日
    0
  • rider 激活码分享【2021.10最新】

    (rider 激活码分享)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~23…

    2022年3月30日
    79
  • pycharm许可证过期_当前系统license过期

    pycharm许可证过期_当前系统license过期问题描述今天打开PyCharm的时候弹出提示框Yourlicensehasexpired,表示证书到期了,无法继续使用软件。之前使用的证书是在学校的时候注册的学生账号,也就是以.edu.cn结尾的账号。现在需要寻找一种新的认证方式。解决方案PyCharm属于JetBrains的一员,这个系列的软件的认证方式有三种,分别是账号登录、激活码和授权服务器。对于在校的学生用户,…

    2022年8月25日
    6
  • phpstorm2022 激活码[最新免费获取]

    (phpstorm2022 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~0V…

    2022年3月31日
    795

发表回复

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

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