python hashlib模块及md5() 、sha()函数用法示例

hashlib模块是python2.5 以后出现的一个包,其主要涉及安全和加密。而且hashlib 得到openssl 的“支持” ,其支持openssl 库提供的所有算法,具体包括md5、sha1、sha224、sha256、sha512等。详细用法,可以通过pydoc hashlib 查看,这里结合两个简单的示例,看下其用法。

一、获取某字符串的md5值

比如在涉及到web 站内用户密码时,经常会将管理员帐户的密码进行md5加密后,再存入数据库。假设admin用户的密码为361way ,通过python代码可以进行如下操作:

>>> import hashlib
>>> m = hashlib.md5()
>>> m.update("361way")
>>> m.hexdigest()
4ac40dc92ce5bc8bbe3d28849f0be1e9

查看帮助时,会现还有一个digest方法。两者的区别如下:

md5.digest()        返回16字节的摘要,由传给update的string生成,摘要没有ascii字符
md5.hexdigest()    以16进制的形式返回摘要,32位

同样,还是上面的361way 字符,执行m.digest()的结果如下:

>>> m.digest()
'J\xc4\r\xc9,\xe5\xbc\x8b\xbe=(\x84\x9f\x0b\xe1\xe9'

如果对hashlib的方法十分熟练的话,上面的代码可以直接简写为如下:

>>> import hashlib
>>> hashlib.md5("361way").hexdigest()
'4ac40dc92ce5bc8bbe3d28849f0be1e9'

sha算法一样,只不过将md5方法换成相应的sha方法。不同的是sha算法执行出的结果更长,相应的比md5计算过程稍慢,所以md5经常用来做用户密码的存储。而sha1则经常用作数字签名。

二、确认文件的md5值

经常我们通过比对文件前后的md5 值 ,来确认文件是否被修改。该部分实现的代码的功能和linux 下md5sum指令的功能相同。具体代码如下:

#!/usr/bin/python
#encoding=utf-8
import io
import sys
import hashlib
import string
def printUsage():
        print ('''Usage: [python] pymd5sum.py <filename>''')
def main():
        if(sys.argv.__len__()==2):
                #print(sys.argv[1])
                m = hashlib.md5()
                file = io.FileIO(sys.argv[1],'r')
                bytes = file.read(1024)
                while(bytes != b''):
                        m.update(bytes)
                        bytes = file.read(1024)
                file.close()
                #md5value = ""
                md5value = m.hexdigest()
                print(md5value+"\t"+sys.argv[1])
                #dest = io.FileIO(sys.argv[1]+".CHECKSUM.md5",'w')
                #dest.write(md5value)
                #dest.close()
        else:
                printUsage()
main()

具体代码我存放到我的github页面上。

为避免文件过大,内存使用率过高,这里在读取文件时是以1024 byte为单位进行读取 。

其他相关模块还有hmac ,主要用于进行密码消息签名与验证。

时间: 2024-10-18 14:37:13

python hashlib模块及md5() 、sha()函数用法示例的相关文章

Python中shutil模块的常用文件操作函数用法示例_python

os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作.比如说:绝对路径,父目录--  但是,os文件的操作还应该包含移动 复制  打包 压缩 解压等操作,这些os模块都没有提供. 而本文所讲的shutil则就是对os中文件操作的补充.--移动 复制  打包 压缩 解压, shutil函数功能:1  shutil.copyfileobj(fsrc, fdst[, length=16*1024]) copy文件内容到另一个文件,可以copy指定大小的内容 先来看看

golang中strconv.ParseInt函数用法示例_Golang

本文实例讲述了golang中strconv.ParseInt函数用法.分享给大家供大家参考,具体如下: golang strconv.ParseInt 是将字符串转换为数字的函数,功能灰常之强大. 参数1 数字的字符串形式 参数2 数字字符串的进制 比如二进制 八进制 十进制 十六进制 参数3 返回结果的bit大小 也就是int8 int16 int32 int64 func ParseInt(s string, base int, bitSize int) (i int64, err erro

javascript中call,apply,bind函数用法示例_javascript技巧

本文实例讲述了javascript中call,apply,bind函数用法.分享给大家供大家参考,具体如下: 一.call函数 a.call(b); 简单的理解:把a对象的方法应用到b对象上(a里如果有this,会指向b) call()的用法:用在函数上面 var Dog=function(){ this.name="汪星人"; this.shout=function(){ alert(this.name); } }; var Cat=function(){ this.name=&qu

MySQL截取和拆分字符串函数用法示例_Mysql

本文实例讲述了MySQL截取和拆分字符串函数用法.分享给大家供大家参考,具体如下: 首先说截取字符串函数: SUBSTRING(commentid,9) 这个很简单,从第9个字符开始截取到最后.SUBSTRING的参数有三个,最后一个是截取的长度,默认是到结尾,负数是倒数第几位. 接着说拆分字符串函数: SUBSTRING_INDEX(commentid, '-', 1) 这个就稍稍复杂一些了,他的意思是以 - 进行拆分字符串,从第一个关键词开始取前面所有的字符串.如果上面的第三个参数修改为 -

JS作为值的函数用法示例_javascript技巧

本文实例讲述了JS作为值的函数用法.分享给大家供大家参考,具体如下: function callSomeFunction(someFunction,someArgument){ return someFunction(someArgument); } 这个函数接受两个参数,第一个函数应该是一个函数,第二个参数应该是要传递给该函数的一个值.该函数是通用的. 如: function add10(num){ return num+10; } var result = callSomeFunction(

smarty自定义函数用法示例

本文实例讲述了smarty自定义函数用法.分享给大家供大家参考,具体如下: <?php require_once "smarty.config.php"; //自定义一个函数 //调用方法:<{test1 times="4" size="5" con="Hello,Liuyibao!" color="red"}> function test1($args){ $str="&quo

Python map和reduce函数用法示例_python

先看map.map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 举例说明,比如我们有一个函数a(x)=x*2,要把这个函数作用在一个list [1, 2, 3, 4, 5]上,就可以用map()实现如下: 复制代码 代码如下: >>> def a(x): ...     return x * 2 ... >>> map(a, [1,2,3,4,5]) [2, 4, 6, 8, 10] map传入

php中的字符编码转换函数用法示例_php技巧

本文实例讲述了php中的字符编码转换函数的用法,分享给大家供大家参考.具体实现方法如下: 一般来说,在网页程序中,尤其是涉及到数据库的读出过程中,往往最恼火的就是字符编码的问题,php4.0.6以上的版本提供了mb_convert_encoding 可以方便的转换编码. 具体如下: 复制代码 代码如下: <?php /* Convert internal character encoding to SJIS */ $str = mb_convert_encoding($str, "SJIS

window.moveTo()函数用法示例

window|函数|示例 (一).示例图片效果 (二).代码<html><head><title>window.resizeTo()函数</title> <script laguage="javascript"><!--function movewin(form){var winx=form.X.value;var winy=form.Y.value;window.moveTo(winx,winy);}//-->&