Python3.7模块之hashlib

Python3.7模块之hashlibupdate()不支持将字符串对象引入,因为哈希在字节上工作,而不在字符上工作。所以update后面的括号里只能是字节(bytes)形式importhashlibmd=hashlib.md5()md.update(“你好”)md=md.hexdigest()print(md)出现以下错误:D:\PycharmProjects\untitled\venv\Scripts\pyt…

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

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等
这里以hashlib举例:

import hashlib

md=hashlib.md5()
md.update("你好")
md=md.hexdigest()
print(md)

出现以下错误:

D:\PycharmProjects\untitled\venv\Scripts\python.exe D:\PycharmProjects\untitled\myself\test2.py
Traceback (most recent call last):
  File "D:\PycharmProjects\untitled\myself\test2.py", line 4, in <module>
    md.update("你好")
TypeError: Unicode-objects must be encoded before hashing

由上图可知我们是没有对字符串进行编码
因为update()的括号里不支持将字符串对象引入,因为哈希在字节上工作,而不在字符或字符串上工作。通俗点说就是,必须要将update括号里的字符串以一种编码格式(最好是utf-8)进行编码,转换为字节(bytes)格式

所以update后面的括号里的字符串必须进行编码,转换成字节

hexdigest(…) 以16进制形式返回加密内容
这里以hashlib中md5加密为例:

#三种编码模式
#1.
import hashlib   #导入hashlib模块

md=hashlib.md5()   #将hashlib.md5的算法赋值给md
md.update("你好".encode('utf-8'))   #先将你好这个字符串以utf-8编码转换成bytes(字节)格式,再存入到md变量中,因为update中只能存入bytes(字节)
md=md.hexdigest()   #hexdigest(…) 以16进制形式返回加密内容
print(md)
#结果:7eca689f0d3389d9dea66ae112e5cfd7

#2.
import hashlib   #导入hashlib模块

md=hashlib.md5()   #将hashlib.md5的算法赋值给md
md.update(bytes("你好",encoding='utf-8'))   #先将你好这个字符串以utf-8编码转换成bytes(字节)格式,再存入到md变量中,因为update中只能存入bytes(字节)
md=md.hexdigest()   ##hexdigest(…) 以16进制形式返回加密内容
print(md)
#结果:7eca689f0d3389d9dea66ae112e5cfd7

#3.
import hashlib   #导入hashlib模块

md=hashlib.md5()
md.update(b'123abc')   #这里是直接将b后面单引号里的字符转换为字节,b后面只能是数字或字母,不能是中文;因为b单引号里的内容默认是使用ASCII进行编码,引号中不能出现中文,只能是字符
md=md.hexdigest()   #hexdigest(…) 以16进制形式返回加密内容
print(md)
#结果:a906449d5769fa7361d7ecc6aa3f6d28

与hexdigest对应的还有:
digest(…) 以字符形式返回加密内容

import hashlib   #导入hashlib模块

md=hashlib.md5()
md.update("你好".encode('utf-8'))
md=md.digest()   #digest(…) 以字符形式返回加密内容
print(md)
#结果:b'~\xcah\x9f\r3\x89\xd9\xde\xa6j\xe1\x12\xe5\xcf\xd7'

注:字符不同于字符串,字符是指计算机中使用的文字和符号,不是字节,例如1、2、3、a、b、c、A、B、C、~、@、#、¥、%、\、/等等

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux常用命令详解_shell基本命令的使用

    Linux常用命令详解_shell基本命令的使用一、日常使用命令/常用快捷键命令开关机命令    1、shutdown–hnow:立刻进行关机     2、shutdown–rnow:现在重新启动计算机     3、reboot:现在重新启动计算机     4、su-:切换用户;passwd:修改用户密码     5、logout:用户注销常用快捷命令     1、…

    2022年9月30日
    0
  • android vlc 中文字幕,解决Android版vlc中文乱码问题

    android vlc 中文字幕,解决Android版vlc中文乱码问题FQ到googleplaystore安装了vlc以后播放视频中文显示方框,开始以为编码问题,将字幕文件转换成utf-8以后问题依旧。android版vlc有个开发者模式,可以查看运行日志:07-0216:13:30.658D/VLC(19362):freetypesputext:Using/system/fonts/DroidSans-Bold.ttfasfont…

    2022年7月11日
    16
  • Maven报错:The packaging for this project did not assign a file to the build artifact[通俗易懂]

    Maven报错:The packaging for this project did not assign a file to the build artifact[通俗易懂]一、问题发生    我想使用IDEA的Maven管理工具将项目安装到本地仓库,于是选择了Plugins下的install:install去执行,如下图所示:结果出现了如下报错信信息:[ERROR]Failedtoexecutegoalorg.apache.maven.plugins:maven-install-…

    2022年5月15日
    64
  • lookdiv激活码【2021最新】[通俗易懂]

    (lookdiv激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月26日
    224
  • 特立独行的理解_幸福在一起第14集

    特立独行的理解_幸福在一起第14集原题链接对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;其独立性就是依附于它的的幸福数

    2022年8月8日
    2
  • 电信dns地址是多少?

    电信dns地址是多少?安徽电信dns地址202.102.192.68202.102.199.68澳门电信dns地址202.175.3.8202.175.3.3北京电信dns地址202.96.199.133202.96.0.133202.106.0.20202.106.148.1重庆电信dns地址61.128.128.68…

    2022年7月15日
    16

发表回复

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

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