关于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。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 优化SQLServer——表和分区索引

    优化SQLServer——表和分区索引

    2021年11月25日
  • 树莓派是什么?能干什么?和单片机有什么区别?「建议收藏」

    树莓派是什么?能干什么?和单片机有什么区别?「建议收藏」什么是树莓派?树莓派是由树莓派基金会发布的卡片式电脑,起初的目的是为了让更多的孩子们可以学习计算机编程,但是发布以后受到了广大计算机爱好者的喜爱。树莓派被称为卡片式电脑,顾名思义它可以安装操作系统,并且接上显示屏鼠标键盘就可以正常使用,在上面可以用python或者C语言编程并运行。树莓派和单片机的区别?树莓派是卡片式电脑可以装操作系统,可以直接在上面编程并运行,而单片机是没有操作系统的它…

  • 煤矿云计算大数据_构建物联网

    煤矿云计算大数据_构建物联网传统工业实时历史数据库与时序数据库的区别?本文介绍了实时数据库和时序数据库,并就其特点、应用场景、相关厂商、联系与区别做介绍。实时历史数据库![实时历史数据库架构.png](https://img-blog.csdnimg.cn/img_convert/ddd8d3b24107ac2ebf328f3fd390c603.png#clientId=ud49e0880-2e25-4&crop=0&crop=0&crop=1&crop=1&from=drop&i

  • 10个常用的3D建模软件,作为3D建模的软件东西很杂很碎,还需多练习才最重要「建议收藏」

    10个常用的3D建模软件,作为3D建模的软件东西很杂很碎,还需多练习才最重要「建议收藏」很多人都会好奇,电脑是怎么将手绘的2D图形变成3D的实际物品的?究竟是什么神奇魔法能够瞬间将我们的想法变成现实的呢?今天来和大家介绍下工业设计师经常会用到的10个3D建模软件。SolidworksSolidworks是工业设计师经常会用到的一款建模软件。SolidWorks是一款在MircosoftWindows上才能运行的建模计算机辅助设计和计算机辅助工程的计算机程序,由DassaultSystemes开发和发布。这是一款很常见的很普遍的工业设计建模软件,如果你以后有机会在国外找工

  • datagrip 2021激活码 mac【2021免费激活】「建议收藏」

    (datagrip 2021激活码 mac)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • vector subscript out of range数组下标越界错误「建议收藏」

    vector subscript out of range数组下标越界错误「建议收藏」在使用vector二维数组时,产生vectorsubscriptoutofrange错误,检查之后并没有发现数组下标越界问题,百度了一下,发现原来是数组并没有初始化赋值,没有分配空间,所以不能采用下标的方式进行访问。解决方法有两个,一个是初始化数组的时候为其分配空间,其值全部赋值为0。vector<vector<int>>myvec(n,vector<int>(n,0));另一个就是使用vector.push_back添加元素,不使用下

发表回复

您的电子邮箱地址不会被公开。

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