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中的类与对象之描述符详解
Mar 27 Python
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
Python简单遍历字典及删除元素的方法
Sep 18 Python
python检查URL是否正常访问的小技巧
Feb 25 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
Python使用Pickle模块进行数据保存和读取的讲解
Apr 09 Python
Python+OpenCV采集本地摄像头的视频
Apr 25 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
Python list运算操作代码实例解析
Jan 20 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 Python
分位数回归模型quantile regeression应用详解及示例教程
Nov 02 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获取网页标题的3种实现方法代码实例
2014/04/11 PHP
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
[20:30]职业巡回赛回顾
2018/08/09 DOTA
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
Python栈类实例分析
2015/06/15 Python
Python语法快速入门指南
2015/10/12 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
python简单操作excle的方法
2018/09/12 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
什么是Smart Navigation?
2016/07/03 面试题
医学院学生的自我评价分享
2013/11/19 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
高中生学期学习自我评价
2014/02/24 职场文书
《搭石》教学反思
2014/04/07 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
党支部先进事迹材料
2014/12/24 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
党纪处分决定书
2015/06/24 职场文书