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


相关推荐

  • iscsiadm用法简介[通俗易懂]

    iscsiadm用法简介[通俗易懂]已知192.168.14.112节点,存在目标器 iqn.2015.06.cn.hrbyg.www.ygcs.c0a802b8:wzg,未设置CHAP,存在目标器 iqn.2015

    2022年7月1日
    28
  • STM32新手入门教程[通俗易懂]

    STM32简介简介参考自:小马哥STM32四轴学习平台–DragonFly四轴STM32单片机软件入门级飞控算法课程单片微型计算机简称单片机(MCU(MicrbControlUnit)),我们自己的个人计算机中,CPU、RAM、ROM、I/O这些都是单独的芯片,然后这些芯片被安装在一个主板上,这样就构成了我们的PC主板,进而组装成电脑,而单片机只是将这所有的集中在了一个芯片上而已。单片机又有8位的如51单片机、16位的如MSP430、32位的如STM32,通常我们说的多少位通常指的是内核(CPU)一次

    2022年4月10日
    352
  • axisfault faultcode_转付证明怎么写

    axisfault faultcode_转付证明怎么写2007-06-26关于AxisFault的说明一般说来,不可避免的WebService的服务中也会出现异常,举个简单的例子,一个服务接受一个SOAP请求消息,获取有效负载后,进行一个数据库更新操作,而在更新操作过程中发生了SQLException,这个时候就需要告诉客户端(调用WebService)出现异常了,Axis2将异常封装成为一个AxisFault进行抛出。任何类型的…

    2025年11月8日
    2
  • cass9.1快捷键怎么设置_cass9.1格式刷快捷键命令

    cass9.1快捷键怎么设置_cass9.1格式刷快捷键命令在CAD操作中我们常用一些快捷键来代替鼠标操作从而提高绘图效率,以下是小编为大家整理的常用快捷键大全,涵盖图文版、文字版、键盘版。图文版:文字版:一、常用功能键F1:获取帮助F2:实现作图窗和文本窗口的切换F3:控制是否实现对象自动捕捉F4:数字化仪控制F5:等轴测平面切换F6:控制状态行上坐标的显示方式F7:栅格显示模式控制F8:正交模式控制F9:栅格捕捉模式控制F10:极轴模…

    2022年4月19日
    286
  • Spring Cloud Eureka集群

    Spring Cloud Eureka集群            SpringCloud基础教程[Eureka集群]NetflixEureka介绍SpirngCloudEureka使用NetflixEureka来实现服务注册与发现。它既包含了服务端组件,也包含了客户端组件,并且服务端与客户端均采用java编写,所以Eureka主要适用于通过java实现的分布式系统,或是JVM兼容语言构建的系统。E…

    2022年5月3日
    53
  • qq wine linux_wine qq

    qq wine linux_wine qq次博客为转载,原作者地址点击此处,解决ubuntu笔记本安装qq百度网盘微信等软件的问题 &lt;divid="secondary"role="complementary"style="position:relative;"&gt; &lt;headerid="header"role="banner"&gt; &lt;div

    2025年9月17日
    5

发表回复

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

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