文档章节

Python 学习笔记- hashlib模块

乐搏学院
 乐搏学院
发布于 2017/04/05 14:24
字数 553
阅读 6
收藏 0

Python里面可以通过hashlib来加密文件。hashlib可以支持多种加密,以最常见的md5为例,我们可以用来加密用户的输入密码,然后保存在数据库里。

 

例1 加密字符串

1

2

3

4

5

6

7

8

9

10

11

12

13

import hashlib

obj = hashlib.md5(bytes('1111', encoding='utf-8'))

obj=hashlib.md5()

obj.update(bytes('123', encoding='utf8'))

obj.update(bytes('456',encoding='utf8'))

result = obj.hexdigest()

print(obj)

print(obj.digest())

print(result)

----------------

<md5 HASH object 0x101d839b0>

b'\xe1\n\xdc9I\xbaY\xab\xbeV\xe0W\xf2\x0f\x88>'

e10adc3949ba59abbe56e057f20f883e

 

值得注意的有几点:

  1. 首先通过hashlib.md5()生成一个对象;然后调用这个对象的方法update去生成对应的md5 checksum,然后打印出来;

  2. 我对字符串‘123’,‘456’的字节分别执行了update的操作,那么最后他的md5结果和‘123456’的字节其实是一样的。通过类似的方法,我们可以把一个很大的文件分字节的读入。

  3. hexdigest()和digest()的区别 前者输出的是2进制 后者是一个16进制的摘要

  4. 因为md5可以通过撞库来破解,因此可以通过 obj=hashlib.md5(bytes('111',encoding='utf8))再加一次密,这样撞库的几率就大为降低了。

 

例2 加密文件

1

2

3

4

5

6

7

8

9

10

11

import hashlib

def md5(fname):

    hash_md5 = hashlib.md5()

    with open(fname, "rb") as f:

        for chunk in iter(lambda: f.read(4096), b""):

            hash_md5.update(chunk)

    return hash_md5.hexdigest()

dd=md5('index.py')

print(dd)

-----------------------

06fd2a2b98ff2e333bc9861dfb8048de

注意事项:

因为文件可能很大,所以每次只读取4096个字节进行转换。最后返回最终的md5 checksum。

注意这一句 iter()的使用,第一个参数是返回的f.read(4096)个字节码的迭代器,第二个参数b"" 表示直到这个参数才迭代结束,换句话说相当于一个循环,每次读取4096个字节码,直到为空

1

for chunk in iter(lambda: f.read(4096), b"")

 

最后的MD5结果和我直接在OSX Shell里面操作是一样的

1

2

jip-ise:week6 yli$ md5 index.py 

MD5 (index.py) = 06fd2a2b98ff2e333bc9861dfb8048de

 

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

 

本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1854933

© 著作权归作者所有

乐搏学院
粉丝 9
博文 526
码字总数 707467
作品 0
丰台
程序员
私信 提问
Python第三章模块-张明阳-专题视频课程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a2011480169/article/details/83580545 Python第三章模块—142人已学习 课程介绍 介绍Python在项目当中常用的...

安静的技术控
2018/04/20
0
0
md5模块(Python内置模块)和hashlib模块

MD5模块用于产生消息摘要,康用来判断文件是否相同。 python的md5模块使用非常简单,包括以下几个函数: md5.new([arg]) 返回一个md5对象,如果给出参数,则相当于调用了update(arg) md5.upd...

duhaizhang
2012/07/15
0
2
Python3基础之学习笔记(六)-json与pickle数据序列化-项目目录结构-模块详解

文章目录 1. json与pickle数据序列化 2. 项目目录结构 3. 模块详解 1. json与pickle数据序列化 1.1 json序列化与反序列化 1.1.1 json序列化 1.1.2 json反序列化 1.1.3 json小结 Json只能进行...

GoldenKitten
01/15
0
0
python模块介绍- hashlib

python模块介绍- hashlib 2013-05-13 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.com qq 37391319 博客:http://blog.csdn.net/oychw #版权所有,转载刊登请来函联系 # ...

长平狐
2013/12/25
125
0
总结学习 Python 的 14 张思维导图汇总

本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库,后续会发布相应专题的文章)。 首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列...

两味真火
2017/10/01
4.4K
10

没有更多内容

加载失败,请刷新页面

加载更多

Feign Retryer的默认重试策略测试

1、Feign配置 @Configurationpublic class FeignConfig { @Value("${coupon_service.url:http://localhost:8081}") private String couponServiceUrl; @Bean publ......

moon888
19分钟前
1
0
关于不同域名下的session共享问题

如果登录,首页,分类,列表,产品都在不同的二级域名下,主域名不变,一定要保证里面的版本问题,不能为了更新而更新,这样哪个下面的session都访问不了。

dragon_tech
21分钟前
1
0
iOS 中文拼音互转(好东西记录一下)

PinYin4Objc

_____1____
29分钟前
1
0
fabric private data实战

Hyperledger Fabric private data是1.2版本引入的新特性,fabric private data是利用旁支数据库(SideDB)来保存若干个通道成员之间的私有数据,从而在通道之上又提供了一层更灵活的数据保护...

汇智网教程
29分钟前
1
0
es之聚合查询汇总

记录一下最近用到的es聚合查询,感觉常见的应该多遇上了,下午抽空更新

我真是小菜鸡
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部