python hashlib_python中hashlib模块用法示例

python hashlib_python中hashlib模块用法示例我们以前介绍过一篇 Python 加密的文章 Python 加密的实例详解 今天我们看看 python 中 hashlib 模块用法示例 具体如下 hashlibhashl 主要提供字符加密功能 将 md5 和 sha 模块整合到了一起 支持 md5 sha1 sha224 sha256 sha384 sha512 等算法具体应用 usr bin envpython coding UTF 8

我们以前介绍过一篇Python加密的文章:Python 加密的实例详解。今天我们看看python中hashlib模块用法示例,具体如下。

hashlib

hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法

具体应用

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

#pyversion:python3.5

#owner:fuzj

import hashlib

# # md5 #

string = “beyongjie”

md5 = hashlib.md5()

md5.update(string.encode(‘utf-8’)) #注意转码

res = md5.hexdigest()

print(“md5加密结果:”,res)

# # sha1 #

sha1 = hashlib.sha1()

sha1.update(string.encode(‘utf-8’))

res = sha1.hexdigest()

print(“sha1加密结果:”,res)

# # sha256 #

sha256 = hashlib.sha256()

sha256.update(string.encode(‘utf-8’))

res = sha256.hexdigest()

print(“sha256加密结果:”,res)

# # sha384 #

sha384 = hashlib.sha384()

sha384.update(string.encode(‘utf-8’))

res = sha384.hexdigest()

print(“sha384加密结果:”,res)

# # sha512 #

sha512= hashlib.sha512()

sha512.update(string.encode(‘utf-8’))

res = sha512.hexdigest()

print(“sha512加密结果:”,res)

输出结果:

md5加密结果: 0e725eff4076f774dc312d4748

sha1加密结果: 458d32be8ea38bab0a8c0bf

sha256加密结果: 1e62b55bfd0f885f6a0998af7cc9cfb95c8ac4a9f30ecccb7c05ec9f4

sha384加密结果: e91cdf0d2570de5c96ee84e8a12cddfe7a03b3ecfcd54b7f52183e20197cff7c07ff0ba4875b

sha512加密结果: 3f0020a726e9c1cb5d22290c967f3dd1bcecb409a51a8088dbc876aaec3f17a70d7981cd575ed4b89471f743f3f24a146a39d59f215ae3e208d0

注意:hashlib 加密啊的字符串类型为二进制编码,直接加密字符串会报如下错误:

sha1 = hashlib.sha1()

sha1.update(string)

res = sha1.hexdigest()

print(“sha1加密结果:”,res)

TypeError: Unicode-objects must be encoded before hashing

可以使用encode进行转换

shaa1 = hashlib.sha1()

shaa1.update(string.encode(‘utf-8’))

res = shaa1.hexdigest()

print(“sha1采用encode转换加密结果:”,res)

或者使用byte转换为二进制

shab1 = hashlib.sha1()

shab1.update(bytes(string,encoding=’utf-8′))

res = shab1.hexdigest()

print(“sha1采用byte转换的结果:”,res)

以上输出:

sha1采用encode转换加密结果: 458d32be8ea38bab0a8c0bf

sha1采用byte转换的结果: 458d32be8ea38bab0a8c0bf

常用方法

hash.update(arg) 更新哈希对象以字符串参数, 注意:如果同一个hash对象重复调用该方法,则m.update(a); m.update(b) 等效于 m.update(a+b),看下面例子

m = hashlib.md5()

m.update(‘a’.encode(‘utf-8’))

res = m.hexdigest()

print(“第一次a加密:”,res)

m.update(‘b’.encode(‘utf-8’))

res = m.hexdigest()

print(“第二次b加密:”,res)

m1 = hashlib.md5()

m1.update(‘b’.encode(‘utf-8’))

res = m1.hexdigest()

print(“b单独加密:”,res)

m2 = hashlib.md5()

m2.update(‘ab’.encode(‘utf-8’))

res = m2.hexdigest()

print(“ab单独加密:”,res)

输出结果:

第一次a加密: 0cc175b9c0f1b6a831c399e

第二次b加密: 187efd1cc2f40dc2b92f0eba0

b单独加密: 92eb5ffee6ae2fec3ad71cf

ab单独加密: 187efd1cc2f40dc2b92f0eba0

hash.digest() 返回摘要,作为二进制数据字符串值,

hash.hexdigest() 返回摘要,作为十六进制数据字符串值,

hash.copy() 复制

高级加密

以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

low = hashlib.md5()

low.update(‘ab’.encode(‘utf-8’))

res = low.hexdigest()

print(“普通加密:”,res)

high = hashlib.md5(b’beyondjie’)

high.update(‘ab’.encode(‘utf-8’))

res = high.hexdigest()

print(“采用key加密:”,res)

输出结果:

普通加密: 187efd1cc2f40dc2b92f0eba0

采用key加密: 1b073f6b8cffee4c98537b7653

附加HMAC-SHA1各语言版本实现

在各大开放平台大行其道的互联网开发潮流中,调用各平台的API接口过程中,无一例外都会用到计算签名值(sig值)。而在各种计算签名的方法中,经常被采用的就是HMAC-SHA1,现对HMAC-SHA1做一个简单的介绍:

HMAC,散列消息鉴别码,基于密钥的Hash算法认证协议。实现原理为:利用已经公开的Hash函数和私有的密钥,来生成固定长度的消息鉴别码;

SHA1、MD5等Hash算法是比较常用的不可逆Hash签名计算方法;

BASE64,将任意序列的8字节字符转换为人眼无法直接识别的符号编码的一种方法;

各个语言版本的实现为:

Python版:

import hmac

import hashlib

import base64

hmac.new(Token,data,hashlib.sha1).digest().encode(‘base64’).rstrip()

Token:即接口的key

data:要加密的数据

PHP版:

base64_encode(hash_hmac(“SHA1”,clientStr,Token , true))

C++版(Openssl):

HMAC( EVP_sha1(),

/*key data*/ strKey.data(),

/*key len*/ strKey.size(),

/*data */(unsigned char*) strRandom.data(),

/*data len*/ strRandom.size(), digest, &digest_len))

Shell版:

echo -n ‘3f88a95c532bea70’ | openssl dgst -hmac ‘123’ -sha1 -binary | base64

总结

以上就是本文关于python中hashlib模块用法示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:浅谈Python由__dict__和dir()引发的一些思考、浅谈使用Python变量时要避免的3个错误等,感谢朋友们对本站的支持!

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

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

(0)
上一篇 2025年10月29日 上午9:01
下一篇 2025年10月29日 上午9:22


相关推荐

  • jupyter如何运行代码_python jupyter notebook安装

    jupyter如何运行代码_python jupyter notebook安装python-mpipinstall–upgradepippython3-mpipinstall–upgradepip

    2022年10月8日
    4
  • idea查看接口的实现类的方法_进入接口

    idea查看接口的实现类的方法_进入接口shift+alt+B可进入实现类方法

    2022年8月15日
    8
  • 测试UDP端口连通性

    测试UDP端口连通性测试 UDP 端口连通性 Linux 测试 UDP 端口 windows 测试 UDP 端口测试 UDP 端口连通性 Linux 测试 UDP 端口利用 namp 探测 udp 端口 nmap sU1 1 1 1 p5555 PnSTATE 为 open 是正常打开的状态 STATE 为 filtered 是被阻断或者没有打开的状态根据操作系统类型的不同 使用如下指令确认系统内已经安装有 nc 测试工具 检查工具是否安装 whichnc 如果安装会显示 bin nc 如果 nc 未被安装 根据操作系统的不同 使用 yum 或 apt ge

    2026年3月18日
    2
  • 查询接口调用成功,但未查询到数据_dde怎么看

    查询接口调用成功,但未查询到数据_dde怎么看DTU轮询采集指令YeeCOMDTU提供了22组周期串口轮询,1组定时串口查询功能,根据配置规则自动输出串口指令,可实现自动采集外设数据并上报服务器,替代服务器的轮询,减小服务器开销。注1:第1组串口轮询最多可配置6条,单条最大长度28;第2组串口轮询最多可配置4条;单条最大长度28;1组固定时间,最多可以配置5条;单条最大长度20;如还不够或特殊需求可以由服务器下发指令或定制DTU版本。注2:轮询指令可灵活配置,常见

    2022年10月14日
    5
  • Linux镜像大全

    Linux镜像大全Linux 镜像大全 1 Linux 官方镜像 Deepin 镜像 https www deepin org mirrors releases Mint 镜像 https www linuxmint com mirrors phpkernel 镜像站 http mirrors kernel org Fedora 官方镜像站 http mirrors fedoraprojec org publiclistht torrents fedoraprojec org https

    2026年3月16日
    3
  • Portraiture Mac(PS磨皮滤镜插件) v3.5.1已注册版「建议收藏」

    Portraiture Mac(PS磨皮滤镜插件) v3.5.1已注册版「建议收藏」portraituremac激活成功教程版是大家熟知的一款专业磨皮滤镜插件。本次与大家分享的Portraiture插件Mac激活成功教程版专为photoshop软件设计,功能强大,能够智能的对图像中的肤色、毛发以及眉毛等部位进行滤镜抛光处理,细节处理,以减少瑕疵。portraituremac激活成功教程版基本上是人人都能用得上的ps辅助工具,有了它处理人像效果更加显著。原文及下载地址:www.mac69.c…

    2022年7月22日
    30

发表回复

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

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