python常用模块——hashlib模块
Python的hashlib提供了常见的摘要算法,如md5、sha1等
什么是摘要算法了?摘要算法又称哈希算法、散列算法。
它通过一个函数,把任意长度的数据转化魏一个长度固定的数据串(通常用十六进制的字符串表示)。
摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,可以来核对你想要的数据是否被篡改了。
摘要算法之所以能指出数据是否被篡改,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。
而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
我们以最常见的md5为例:
import hashlib
md5 = hashlib.md5() #选择摘要算法中的md5类进行实例化,得到md5
md5.update(b"everything is passible") #对一个字符串进行摘要
print(md5.hexdigest()) #找摘要算法要结果
计算结果如下:
a8c816f56c74b68e4d547769531a46d1
如果数据很大,可以分多次调用update()进行摘要,最后计算的结果是一样的:
import hashlib
md5 = hashlib.md5()
md5.update(b"everything")
md5.update(b" is passible")
print(md5.hexdigest())
md5是最常见的摘要算法,速度很快,生成结果是固定的128bit字节,通常用一个32位的16进制字符串表示。
另一种常见的摘要算法就是sha1,调用sha1和调用md5完全类似:
import hashlib
sha1 = hashlib.sha1()
sha1.update(b"everything is passible")
print(sha1.hexdigest())
计算结果:
000da64f15dce120bd685b189c3e169a1f67753b
sha1的结果是160bit字节,通常用一个40位的十六进制字符串表示。
比sha1更安全的算法是sha256和sha512,不过越安全的算法越慢,而且摘要长度更长。
hashlib一般在文件的一致性校验和加密认证这两方面使用的比较多。
由于常用口令的md5值很容易被计算出来,一般我们会添加一些操作,比如“加盐”,就是通过对原始口令加一个复杂字符串来实现。比如:
#前后加了一些特殊字符串,减少了出现的机率。
import hashlib
md5 = hashlib.md5()
md5.update(b"*)_#$%^&everything is passible%^&")
print(md5.hexdigest())
小结:
摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改和客户验证。
python常用模块——hashlib模块的更多相关文章
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- Python进阶(九)----json模块, pickle模块, os模块,sys模块,hashlib模块
Python进阶----json模块, pickle模块, os模块,sys模块,hashlib模块 一丶序列化模块 什么是序列化: 将一种数据结构,转换成一个特殊的序列(特殊字符串,用于网络传输 ...
- Python常用内建模块
Python常用内建模块 datetime 处理日期和时间的标准库. 注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import da ...
- python常用内建模块 collections,bs64,struct,hashlib,itertools,contextlib,xml
# 2 collections 是Python内建的一个集合模块,提供了许多有用的集合类. # 2.1 namedtuple #tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: p ...
- python模块: hashlib模块, configparse模块, logging模块,collections模块
一. hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用 ...
- python day 8: re模块补充,导入模块,hashlib模块,字符串格式化,模块知识拾遗,requests模块初识
目录 python day 8 1. re模块补充 2. import模块导入 3. os模块 4. hashlib模块 5. 字符串格式:百分号法与format方法 6. 模块知识拾遗 7. req ...
- python模块——hashlib模块(简单文件摘要算法实现)
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" # Usage: hashlib模块 import ...
- Python 常用内建模块(time ,datetime)
1,在Python中,与时间处理有关的模块就包括:time,datetime以及calendar. 2,在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(st ...
- Python正则表达式与hashlib模块
菜鸟学python第十六天 1.re模块(正则表达式) 什么是正则表达式 正则表达式是一个由特殊字符组成的序列,他能帮助对字符串的某种对应模式进行查找. 在python中,re 模块使其拥有全部的正则 ...
- Python进阶-XVV hashlib模块、configparse模块、logging模块
1.配置相关的configparse模块 配置文件如何组织?python中常见的是将配置文件写成py,然后引入该模块即可.优点是方便访问. 但是也有用类似windows中的ini文件的配置文件,了解即 ...
随机推荐
- nginx源码学习_数据结构(ngx_str_t)
nginx中关于字符串的数据结构位于src/core/ngx_string.c和src/core/ngx_string.h中 先来看一下数据结构: typedef struct { size_t le ...
- Swift 烧脑体操一
Swift 烧脑体操(一) - Optional 的嵌套 前言 Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融 ...
- 如何获取UA
function whatBrowser() { document.Browser.Name.value=navigator.appName; document.Browser.Version.val ...
- 【spring boot】在spring boot下使用多线程
使用场景: 方法处理到某一步,需要将信息交给另一个线程去处理!! =================================================================== ...
- Python导入不同文件夹下模块
import os.path as osp import sys def add_path(path): if path not in sys.path: sys.path.insert(0, pat ...
- js保留几位小数
function reservedDecimal(val, digit) { return Number(val).toFixed(digit);} 调用 reservedDecimal(10,2); ...
- C++ 虚析构(virtual destructor)原理
注意:本文仅为个人理解,可能有误! 先看一段代码: #include <iostream> using namespace std; class CBase{ public: CBase( ...
- OpenCV学习笔记十四:opencv_objdetect模块
一,简介: 该库用于目标检测.
- django使用redis做缓存
Django 使用 Redis 做缓存 django中应用redis:pip3 install django-redis - 配置 CACHES = { "default": { ...
- Oracle SQL*Loader 数据导入工具
SQL*Loader是一个向Orale大量倒数据的工具,可以从界定文件中导入数据如用 , 界定的,可以从定宽的文件导入数据,