设为首页 收藏本站
查看: 901|回复: 0

[经验分享] python加密模块-hashlib模块

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-12-6 10:57:19 | 显示全部楼层 |阅读模式

hashlib模块

用于加密相关的操作,3.X里代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法
(sha比md5 更复杂、md5 不能反解)

具体应用:用于网站防篡改。具体方法:监控网站被篡改,定时的去wget 去下载,然后md5比对 ,检查网站是否被篡改。

如何验证md5 呢, 就是在生成一次md5值 比较是否相同。

具体使用方法:

#导入模块
import hashlib

生成一个加密的对象并复制给变量
m = hashlib.md5()

给对象输入加密bytes字符类型
m.update(b"hello")
m.update(b"it's me")

打印加密后的md5值,输出二进制hash
print(m.digest())

打印加密后的md5值,输出十六进制格式hash
print(m.hexdigest())

查看十六进制格式hash的长度为32
print(len(m.hexdigest()))

以下是六种加密方法一一示例:

# SHA1加密
sha = hashlib.sha1()
sha.update("管理员".encode(encoding="utf-8"))
print(sha.hexdigest())

# SHA224加密
sha224 = hashlib.sha224()
sha224.update(b"admin")
print(sha224.hexdigest())

# SHA256加密
sha256 = hashlib.sha256()
sha256.update(b"admin")
print(sha256.hexdigest())

# SHA384加密
sha384 = hashlib.sha384()
sha384.update(b"admin")
print(sha384.hexdigest())

# SHA512加密
sha512 = hashlib.sha512()
sha512.update(b"admin")
print(sha512.hexdigest())

# MD5加密
md5 = hashlib.md5()
md5.update(b"admin")
print(md5.hexdigest())

hmac模块

python还有一个hmac模块,它内部对我们创建key和内容 再进行处理 再加密!
散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;

一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送,用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性,及发送者的合法性了。

算法表示:

算法公式 : HMAC(K,M)=H(K⊕opad∣H(K⊕ipad∣M))[1]

H 代表所采用的HASH算法(如SHA-256)

K 代表认证密码

Ko 代表HASH算法的密文

M 代表一个消息输入

B 代表H中所处理的块大小,这个大小是处理块大小,而不是输出hash的大小

如,SHA-1和SHA-256 B = 64

SHA-384和SHA-512 B = 128

L 表示hash的大小

Opad 用0x5c重复B次

Ipad 用0x36重复B次

Apad 用0x878FE1F3重复(L/4)次

认证流程

(1) 先由客户端向服务器发出一个验证请求。

(2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。

(3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。

(4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户。

具体使用方法:

#导入模块
import hmac

#设置密码和消息 进行加密
h = hmac.new("哈哈哈".encode(encoding="utf-8"),"你好".encode(encoding="utf-8"))

#打印加密后的字符
print(h.hexdigest())

更多关于md5,sha1,sha256等介绍的文章看这里https://www.tbs-certificates.co.uk/FAQ/en/sha256.html




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421181-1-1.html 上篇帖子: python3.5下django2.0使用pymysql连接mysql 下篇帖子: python数据交换模块-XML
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表