python 获取字符串MD5值方法


Posted in Python onMay 29, 2018

工作中用到了MD5值来进行对文件校验,MD5本身就是一个很出色的算法,一定程度上解决了hash散列的冲突,关于MD5的内容网上也有很多,这里只要是进行一个实验,验证一下文件校验方面的工作,因为习惯使用了python来完成这样的任务,这里也是使用python,了解到python本身自带有hashlib模块,该模块中就包含了所需的MD5方法,当然python也有专门的MD5模块可以使用,使用得当发的大同小异,但是个人觉得hashlib模块更好用一些,今天就使用python的os、commands还有hashlib三个模块来进行实验,其中,前两个模块主要是为了可以在python脚本中执行Linux的shell命令,以此来验证一下同一个文件以及文件内容是否可以得到与hashlib模块MD5方法相同的MD5值,好了不多说了,下面是程序,很简单的一个验证,里面都有详细的注释就不多解释了:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
功能:校验文件MD5值
'''
import hashlib, binascii
import md5
import os
import commands



#使用python自带的hashlib库
def get_md5_value(str):
 my_md5 = hashlib.md5()#获取一个MD5的加密算法对象
 my_md5.update(str) #得到MD5消息摘要
 my_md5_Digest = my_md5.hexdigest()#以16进制返回消息摘要,32位
 return my_md5_Digest

#使用python自带的hashlib库如果m.update(a)之后在 m.update(b),那么就相当于m.update(a+b),这里验证一下
def get_md5_value_two(str1, str2):
 my_md52 = hashlib.md5()
 my_md52.update(str1)
 my_md52.update(str2)
 my_md52_Digest = my_md52.hexdigest()
 return my_md52_Digest

#使用SHA1
def get_sha1_value(str):              
 my_sha = hashlib.sha1()
 my_sha.update(str)
 my_sha_Digest = my_sha.hexdigest()
 return my_sha_Digest
#利用os模块system()方法获取文件的MD5值 
def get_file_md5_value(filename): 
 return os.system('md5sum ' + filename + '|cut -f1') 
#利用os模块popen()方法获取文件的MD5值

def get_popen_file_md5_value(filename):
    return os.popen('md5sum ' + filename + '|cut -f1')

#获取文件内容的MD5值
def get_file_content_md5_value(filename):
    fp = open(filename)
    fp_content = fp.read()
    return get_md5_value(fp_content)


#利用commands模块获取文件的MD5值
def get_commands_file_md5_value(filename):
    return commands.getoutput('md5sum ' + filename + '|cut -f1')
if __name__ == '__main__':
 string1 = 'We are friends!!!'
 string2 = 'Do agree with me?'
 filename = 'Linux.txt'
 result_md5_value = get_md5_value(string1)
 result_sha1_value = get_sha1_value(string1)
 print '-------------------------------------------------'
 print '原始字符串为:'+string1
 print 'hashlib模块MD5值为:'+result_md5_value,len(result_md5_value)
 print 'SHA1值为:'+result_sha1_value,len(result_sha1_value)
 print '-------------------------------------------------'
 result_md5_value = get_md5_value(string2)
 result_sha1_value = get_sha1_value(string2)
 print '原始字符串为:'+string2
 print 'hashlib模块MD5值为:'+result_md5_value,len(result_md5_value)
 print 'SHA1值为:'+result_sha1_value,len(result_sha1_value)
 print '----------------------验证---------------------------'
 result_md5_value = get_md5_value(string1+string2)
 result_sha1_value = get_sha1_value(string1+string2)
 print '原始字符串为:', string1+string2
 print 'hashlib模块MD5值为:'+result_md5_value,len(result_md5_value)
 print 'SHA1值为:'+result_sha1_value,len(result_sha1_value)
 print '-----------------------整体MD5--------------------------'
 result_md52_value = get_md5_value_two(string1, string2)
 print '原始字符串为:', string1+string2
 print 'hashlib模块MD5值为:'+result_md52_value,len(result_md52_value)
 print '****************************os模块获取文件的MD5值为*******************************************'
 result_file_value = get_file_md5_value(filename)
 print result_file_value 
 result_popen_file_md5_value = get_popen_file_md5_value(filename)
 print result_popen_file_md5_value 
 print '*****************************os模块获取文件内容的MD5值为******************************************'
 result_file_content_value = get_file_content_md5_value(filename)
 print result_file_content_value, len(result_file_content_value)
 print '*****************************commands模块获取文件的MD5值为******************************************'
 result_commands_file_md5_value = get_commands_file_md5_value(filename)
 print result_commands_file_md5_value, len(result_commands_file_md5_value)

下面是结果: 

------------------------------------------------- 
原始字符串为:We are friends!!! 
hashlib模块MD5值为:469306cbddd0cc5917b9536c54e619ab 32 
SHA1值为:7a3f8637b61108f702052dda52e1251392228260 40 
------------------------------------------------- 
原始字符串为:Do agree with me? 
hashlib模块MD5值为:54f45c7d0aa071186a0ec4a030213d8a 32 
SHA1值为:0a2c0f3317862f7055605e1faab7f02f35f466de 40 
----------------------验证--------------------------- 
原始字符串为: We are friends!!!Do agree with me? 
hashlib模块MD5值为:bd77df50992d4d8b65f19d47a15132fe 32 
SHA1值为:83bc19fc724aaa991a0278fbb1be210bc28757fb 40 
-----------------------整体MD5-------------------------- 
原始字符串为: We are friends!!!Do agree with me? 
hashlib模块MD5值为:bd77df50992d4d8b65f19d47a15132fe 32 
****************************os模块获取文件的MD5值为******************************************* 
80d566209acf154dcfdd25f9079792f6 Linux.txt 
0 
<open file 'md5sum Linux.txt|cut -f1', mode 'r' at 0x7f6d99b010c0> 
*****************************os模块获取文件内容的MD5值为****************************************** 
80d566209acf154dcfdd25f9079792f6 32 
*****************************commands模块获取文件的MD5值为****************************************** 
80d566209acf154dcfdd25f9079792f6 Linux.txt 43

感觉还是效率很不错的,感兴趣的同学可以拿去实验一下,这里使用到的文件Linux.txt粘贴出来:

1.[root@localhost/root]# 表示登陆进去系统,其中#是超级用户也即root用户的系统提示符
2.reboot命令可以重启系统
3.关闭系统使用(该命令只可被超级用户使用):shutdown[选项][时间][警告信息]
-k:不真正关机只是发警告系想你给所有用户
-r:关机后立刻重启
-h:关机后不启动
-f:快速关机重启时跳过fsck
-n:快速关机不经过init程序
-c:取消一个已经运行的shutdown
4.文件操作命令
ls -a列出目录下面所有文件名包括隐藏的文件即以“.”开头的文件
ls -l使用长格式列出文件
ls -F在列出的文件名称后面加一个符号(如可执行文件加*目录加/)
mkdir filename创建新的目录
rmdir filename删除已经建立的目录
cd filename 进入文件目录
cp -r 源文件 目的文件 复制文件
rm -r filename删除该目录以及目录下所有的子目录
rm -f不经确认强制删除文件
rm -i filename 删除文件
mv 源文件路径 目的文件路径 移动文件命令
mv filename1 filename2 重命名
cat filename显示文本文件内容
cat file1 file2 file3依次显示3个文件
cat -n filename显示文档内容的同时显示行号
more filename显示文本文件(内容较多的)
pwd显示当前路径
5.用户以及用户组管理
useradd username创建新的用户
userdel username删除用户
groupadd groupname创建新的用户组
groupdel groupname删除用户组
su -username赋予普通用户特权或超级用户别的身份
chomd[who][+|-|=][mode]filename勇于改变文件或者目录的访问权限
chown[用户:组]文件 用于更改某个文件或者目录的属主和属组
6.进程管理命令
ps -e显示所有的进程
ps -f全格式
ps -l长格式
top 动态显示当前进程和其他情况输入,可以加上参数:
q可以退出查看的页面
(空格)立即刷新显示
h/?显示帮主画面
m切换显示内存信息
t切换显示进程和CPU信息
c切换显示命令名称和完整命令行
M根据驻留内存大小进行排序
P根据CPU使用百分比大小进行排序
kill命令用于杀死后台的进程主要有两种使用方法:
kill[-s 信号] 进程号 杀死指定进程
kill -l显示进程列表
cron命令用来实现定时任务的完成,非手工启动
cron -l查看目前已经存在的cron任务
7.磁盘及文件命令
 df -k显示各个分区的磁盘空间使用情况
 mount[选项]设备 目录 挂载文件
 umount[-f]directory强制卸载一个文件系统
 8.软件安装命令
 tar -c filename创建一个新的档案文件
 tar -t filename查看档案文件的内容
 tar -x filename分解档案文件的内容
 tar -f filename指定档案文件的名称
 tar -v filename显示过程信息
 tar -z filename采用压缩方式
 rpm -i packagename安装包
 rpm -U packagename升级包
 rpm -qa列出已经安装的全部软件包
 rpm -qf filename查询某个特定的文件属于哪个包
 rpm -qi packagename查询某个包的功能
 rpm -e packagename删除包
 9.vim使用
 vim有三个模式:命令行模式、文本输入模式、末行模式
 输入vim即可进入vim编辑器,点击ESC即可进入命令行模式,点击i即可进入文本编辑模式输入:即可进入末行模式
 在末行模式输入q即可退出;输入wq即可保存操作后退出;输入q!强制退出
 10.head/tail
 head -n x filename查看文件的前x行内容
 tail -n y filename查看文件的后y行内容
 head filename查看文件的前十行内容
 tail filename查看文件的后十行内容
 tail -f filename显示后十行内容,并且在内容增加后自动显示新增的文件内容
 11.网络配置
 ifconfig -a查看所有网卡状态信息
 ifconfig -V查看ifconfig命令版本信息
 ifconfig -s查看统计信息
 ifconfig eth ipaddress 设置网卡IP
 ifconfig eth down 关闭网卡
 ifconfig eth up启动激活网卡
 ifconfig eth netmask netmaskaddress 设置网卡的子网掩码地址
 ifconfig eth ipaddress netmask netmaskaddress 同时设置IP和子网掩码地址
 ifconfig eth查看网卡状态
 route查看路由信息
 route add -net ipaddress netmask netmaskaddress dev eth指定接口
 netstat显示网络情况
 ping检测网络连通性
 nslookup ip查看该IP对应的域名
 host domainname查询对应域名的IP
 12.时间
 /sbin/hwclock --show查看当前硬件时间
 /sbin/hwclock --hctosys将硬件时间同步到Linux系统
 /sbin/hwclock --systohc将Linux时间同步到硬件时间
 13.文档
 df -k以KB为单位显示各分区的信息
 df -a显示所有分区包括大小为0的分区
 df -T显示分区类型
 du -b /file以字节为单位显示file文件夹下各个文件夹的大小
 du -ks file以KB为单位显示file文件夹总大小
 iostat显示CPU的情况
 tar -c创建包
 tar -x解包
 tar -t列出包中的内容
 tar -r增加文件到指定包中
 tar -u更新包中的文件
 tar -zcvf file.tar.gz file压缩file
 tar -zxvf file.tar.gz file解压缩file.tar.gz
 find -name file1查找file1
 grep[命令选项]要查找的匹配模式[要查找的文件] 查找文件
 grep str1 file在file中查找字符串str1
 grep -r str1 /file在/file及其子目录下所有文件中查找字符串str1
 ps -ef | grep filename在所有进程中查找包含filename的进程信息
 14服务
 service tomcat4 start启动tomacat4服务
 service tomcat4 stop关闭tomacat4服务

今天的实验就这些了。

以上这篇python 获取字符串MD5值方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python selenium 三种等待方式详解(必会)
Sep 15 Python
你所不知道的Python奇技淫巧13招【实用】
Dec 14 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
解决python3 网络请求路径包含中文的问题
May 10 Python
python sys.argv[]用法实例详解
May 25 Python
Python SMTP发送邮件遇到的一些问题及解决办法
Oct 24 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
python代码编写计算器小程序
Mar 30 Python
PyTorch中的Variable变量详解
Jan 07 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
python中xlutils库用法浅析
Dec 29 Python
scrapy-splash简单使用详解
Feb 21 Python
Python生成短uuid的方法实例详解
May 29 #Python
Python(TensorFlow框架)实现手写数字识别系统的方法
May 29 #Python
Python实现的多进程和多线程功能示例
May 29 #Python
Python实现的redis分布式锁功能示例
May 29 #Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 #Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 #Python
Python根据指定日期计算后n天,前n天是哪一天的方法
May 29 #Python
You might like
php中chdir()函数用法实例
2014/11/13 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
php生成mysql的数据字典
2016/07/07 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
python实现360皮肤按钮控件示例
2014/02/21 Python
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
Python正则表达式和元字符详解
2018/11/29 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
市场营销调查计划书
2014/05/02 职场文书
公司联欢会策划方案
2014/05/19 职场文书
项目经理任命书内容
2014/06/06 职场文书
教师工作表现自我评价
2015/03/05 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
民事调解书范文
2015/05/20 职场文书
大学学生会竞选稿
2015/11/19 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang