python hashlib_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 ''')

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 ,主要用于进行密码消息签名与验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c mysql 查询超时设置_MySQL查询超时的设置方法

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 这里顺带解释一下什么是non-interactive connection Non-Interactive Commands Just do a quick look up on a table without logging into the client, running the query then logging back out aga欢…

python聚类分析案例_深度解读|如何构建用户分级体系实现精细化运营?附案例实操...

本文内容较长,代码全部已展示在文中用户精细化分类也可以称做用户画像,是目前很常见的一种运营手段,目的是为了更好的服务不同性质的客户,提高每个环节的转化率,最大程度挖掘客户价值,创造利润。那么如何构…

mysql 查询语句 过滤_MySQL全面瓦解7:查询的过滤条件

概述在实际的业务场景应用中,我们经常要根据业务条件获取并筛选出我们的目标数据。这个过程我们称之为数据查询的过滤。而过滤过程使用的各种条件(比如日期时间、用户、状态)是我们获取精准数据的必要步骤,这样才能得到我们期望的结果。所以本章我们来学…

单片机集成wifi等_从零制作单片机需要哪些知识?

请点击上面 免费关注...说一下从芯片制作开始到最后编写驱动程序整个过程中每一步所需要的知识。作者:彭谟威链接:https://www.zhihu.com/question/28580074/answer/93515413来来来,让我们一起,左手右手一个慢动作。每一个方向都值…

matlab案例_基于matlab和frost平台的cassie案例足式机器人运动学和动力学计算实现过程...

1、软件平台Maltab2019aMathematica 12.1.0Frost2、实现步骤(1)、安装matlab2019a(2)、安装Mathematica 12.1.0(3)、下载frost-dev-master软件说明:https://ayonga.github.io/frost-dev/pages/i…

计算机毕业设计----SSM实现的一个在线文具学习用品购买商城

项目介绍 本项目分为前后台,前台为普通用户登录,后台为管理员登录; 管理员角色包含以下功能: 管理员登录,管理员信息管理,查看用户信息,新闻公告信息管理,文具类型信息管理,城市信息管理,配货点信息管理,文具信息管理,订单信息…

python2和3语法区别_python2和3语法区别

以下是Python2和Python3中的一些语法差异,有需要的小伙伴可以学习下。 print语句 在Python 2里,print是一个语句。无论你想输出什么,只要将它们放在print关键字后边就可以。在Python 3里,print()是一个函数。就像其他的函数一样&a…

mysql 5.7 数据库备份_mysql 5.7 数据库备份

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

python如何循环使用input_python基础知识input到while循环

j周笔记 输入与输出 1.输入 input (请输入内容) 字符串 2.输出 print(输出到控制台) 变量vairable 变量就是相当于我们人的名字 1.名字 2.存储位置 3.该存储位置的内容解释 ​ name(名字) 张三(值(存储位置)) 变量名 值 注意: 给变量取名字时,一定要遵循python语法规范 1.变量…

MySQL的teaching表建立_MySQL-一- 创建数据表

问题一:如何验证MySQL数据库安装成功?问题二:如何用客户端navicat连接到MySQL数据库?练习:创建学校数据库的表2.创建数据库2.1 创建学生表student2.2创建成绩表score2.3创建课程表course2.4创建教师表 teacher注&#…

echarts tooltip被遮挡_echarts 的tooltip定位到当前图,避免溢出和遮挡

问题:tooltip初始是跟着鼠标移动,当内容过多(宽度高度过大),会被其他遮挡或者会溢出屏幕外解决:思路:根据官方文档,鼠标在左侧时,tip在右侧,鼠标在右侧时&…

16比9尺寸是多少厘米_16比9(16比9分辨率大全)

原式=2/9(1-7/16)=2/9*9/16=1/8,提公因式,因为后面分子上出现9,可以约掉 16比9计算公式是:16=2*2*2*29=3*3 因为没有公因数,互质,所以16比9就是最简比形式。求比值,可以是整数,小数,分数。比值,即两数相比所得的值。扩展资料 a、. 1280*768与1280*960即不是16:9也不是…

idea mysql错误提示_idea提示错误:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

碰见了一个问题,一直无法解决,希望大家帮帮忙。这是连接mysql的JdbcUtils代码:public class JdbcUtils {// 配置文件private static Properties props null;// 静态块保证只加载一次static {InputStream in JdbcUtils.class.getClassLoader…

python中seed的用法_Python中的seed()方法怎么用

Python中的seed()方法怎么用?下面是seed()方法的相关介绍: 描述 seed() 方法改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数。 语法 以下是 seed() 方法的语法:import random random.seed ( [x] ) 注意:seed(…

mysql 数据库访问层_MYSQL数据库访问层

/*** 数据访问层,仅处理MYSQL* 包括* by:李勇* at:2009-01-19*/final classDalSplite{public function__construct(PDO $pdo){}}/*** 指定库中的指定表的访问类**/final classDalTable{private$pdo;private$tableName;private$meta;private$primaryKey;/*** 构造方法…

bootstrap 输入错误提示_win7系统提示explorer.exe应用程序错误怎么办

在电脑当中弹出错误提示框可谓是多种多样,详细有很多电脑都有碰到过,最近有位win7系统用户在使用电脑的过程中,系统总是提示“explorer.exe应用程序错误”,用户不知道怎么解决这个问题,为此非常苦恼,那么wi…

mysql 分页效率_MYSql分页查询效率提高

CREATE TABLE goods (UrlId char(100) CHARACTER SET utf8 NOT NULL,Title varchar(100) CHARACTER SET utf8 DEFAULT NULL,CreateTime char(30) CHARACTER SET utf8 DEFAULT NULL,PRIMARY KEY (UrlId))上面是本人表格的结构,本人的程序是用来做搜索引擎的&#xff…

json阅读器_Flutter小说阅读器系列一:使用Bloc模式获取起点小说关键字提示

Bloc模式下的小说关键字提示效果图最近难得有些闲暇时间,所以我又打算做一个小说阅读器,以前倒是用RNGolang写了一个,不过当时太过放飞自我导致自己看起来都很费力,这次我准备换成Flutter试一下。先简单将小说阅读器分为以下几个部…

python获取mysql中的数据供js调用_详解js文件通过python访问数据库方法

我来教你 js文件怎么通过python访问数据库,希望能够为你带来帮助。 1、如果是要提交表单内容给 服务器的 python 处理,那么只需要在表单 里面的 action 填写服务端的处理路由就可以了。或者用 指向服务器路由get querystring。前端方面不需要python啊。…

python 初始化一个4维向量_看图学NumPy:掌握n维数组基础知识点,看这一篇就够了...

摘要:NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具。国外有位程序员讲NumPy的基本运算以图解的方式写下来,让学习过程变得轻松有趣。 NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具。然而对初学者来说,NumPy的大量运算…