码迷,mamicode.com
首页 > 其他好文 > 详细

hashlib模块

时间:2018-06-25 16:47:14      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:md5加密   加密   固定   int   破解   校验   with open   dig   bcb   

1.什么是hash?

hash是一种算法,该算法接受传入的内容,经过运算得到一个hash值。

如果把hash算法比作一个工厂,那么给hash算法的内容就是原材料,生成的hash值就是得到的产品。

2.为何使用hash算法?

hash值有三大特性:

    1.只要传入的内容一样,得到的hash值必然是固定的。

    2.只要使用的hash算法是一样的,不论传入多大的内容,hash值长度都是固定的。

    3.不可用hash值逆推出原来的内容。

 

基于1和2可以在下载文件时做文件一致性校验

基于1和3可以对密码进行加密——> 登陆时密码hash 将获得的hash值传给数据库,数据库调用用户名和对应的hash值做比较,一样则让用户登陆。hash不可逆推,就算被截获也得不出密码。

3 怎么用hash?

例子用的是MD5加密 (还有sha512加密等)

import hashlib

#1、造出hash工厂
m=hashlib.md5()

#2、运送原材料
m.update(‘你好啊美丽的‘.encode(‘utf-8‘))
m.update(‘张铭言‘.encode(‘utf-8‘))

#3、产出hash值
print(m.hexdigest()) #66bcb9758826f562ae8cb70d277a4be9

上下两个hash值是一样的,传入的内容是一样的
#1、造出hash工厂
m=hashlib.md5(‘你‘.encode(‘utf-8‘))

#2、运送原材料
m.update(‘好啊美丽的张铭言‘.encode(‘utf-8‘))

#3、产出hash值
print(m.hexdigest()) #66bcb9758826f562ae8cb70d277a4be9


在不同目录下相同的内容得到的hash值相同
文件的一致性校验
#1、造出hash工厂
m=hashlib.md5()

#2、运送原材料
with open(r‘E:\01.mp4‘,‘rb‘) as f:
for line in f:
m.update(line) # 文件过大不能用m.update(f.read())
#3、产出hash值
print(m.hexdigest()) #1273d366d2fe2dc57645cc1031414a05
# 1273d366d2fe2dc57645cc1031414a05

 

应用一:对明文密码进行加密
password=input(‘>>>: ‘)

m=hashlib.md5()
m.update(‘天王盖地虎‘.encode(‘utf-8‘)) # 加盐 需要破解用户输入的密码和加盐得数据类型,破解难度增大,加的盐可以和密码混合
m.update(password.encode(‘utf-8‘))
print(m.hexdigest()) #95bd6eafefdf51d8b153785f3fb6263d


# 加盐算法
import hmac,hashlib
# m = hmac.new(key,msg,digestmod="MD5")

m=hmac.new(‘小鸡炖蘑菇‘.encode(‘utf-8‘),digestmod="MD5") # 后面不加默认是MD5加密
m.update(‘hello‘.encode(‘utf-8‘))
print(m.hexdigest()) # 38a608c5c394dfd4d4a882415cc1024e

hashlib模块

标签:md5加密   加密   固定   int   破解   校验   with open   dig   bcb   

原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9224427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!