首页IT科技python的工具栏怎么调出(Python工具箱系列(十六))

python的工具栏怎么调出(Python工具箱系列(十六))

时间2025-08-05 15:17:36分类IT科技浏览4720
导读:前面介绍了对称加密算法,本文将介绍密码学中另一类重要应用:消息摘要(Digest ,什么是消息摘要?简单的定义是:对一份数据,进行一个单向的Hash函数,生成一个固定长度的Hash值,这个值就是这份数据的摘要,也称为指纹。...

前面介绍了对称加密算法             ,本文将介绍密码学中另一类重要应用:消息摘要(Digest)                    ,什么是消息摘要?简单的定义是:对一份数据       ,进行一个单向的Hash函数      ,生成一个固定长度的Hash值                    ,这个值就是这份数据的摘要             ,也称为指纹             。

常见的摘要算法有:

MD5 SHA1 SHA256 其它

特点如下:

无论输入的消息有多长      ,计算出来的消息摘要的长度总是固定的                    。例如应用MD5算法摘要的消息有128个比特位                    ,一般认为             ,摘要的最终输出越长,该摘要算法就越安全       。变长输入                    ,定长输出      。

一般地                    ,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出                    。

消息摘要函数是单向函数             ,即只能进行正向的信息摘要                    ,而无法从摘要中恢复出任何的消息       ,甚至根本就找不到任何与原信息相关的信息             。

优秀的摘要算法             ,没有人能从中找到“碰撞             ”                    ,即无法找到两条不同的消息       ,使它们的摘要相同      。

在python3中,关于hash加密算法都放在hashlib这个标准库中      ,如SHA1             、SHA224                    、SHA256       、SHA384             、SHA512和MD5算法等                    。md5算法以前单列                    ,而在python3的标准库中             ,也放在hashlib库中             。在不同的平台上hashlib的能力不同      ,使用以下代码进行检测。

MD5即Message-Digest Algorithm 5(信息-摘要算法5)                    ,用于确保信息传输完整一致                    。是计算机广泛使用的杂凑算法之一(又称摘要算法                   、哈希算法)                    。

MD5算法具有以下特点:

压缩性:任意长度的数据             ,算出的MD5值长度都是固定的。

容易计算:从原数据计算出MD5值很容易             。

抗修改性:对原数据进行任何改动,哪怕只修改1个字节                    ,所得到的MD5值都有很大区别                    。

强抗碰撞:已知原数据和其MD5值                    ,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的       。

MD5算法虽然应用广泛,但是它也有重大缺陷             。

2010年CMU软件工程机构认为MD5摘要算法已经在密码学上被破译并且不适合使用                    。

2012年恶意软件利用了MD5的漏洞并伪造了微软的数字签名       。

虽然md5存在重大问题             ,但在普通环境下                    ,md5并非完全不可用       ,从时间       、成本以及要处理对象综合考虑             ,仍然可以用md5做一些基本的工作      。下面演示md5算法库的使用演示                    。

import hashlib def md5_demo(inputstr,codingname): return hashlib.md5(inputstr.encode(encoding=codingname)).hexdigest() codingnamelist = [UTF-8,GBK,GB2312,GB18030] data = [欢迎关注陕西华路,stay hungry stay foolish] for item in data: print(item) for cdn in codingnamelist: print(md5_demo(item,cdn)) print()

这段代码演示了中文与英文字符串                    ,在使用不同编码方式下生成的不同的md5值             。对于中文而言       ,不同的编码会导致不同的输出      。

欢迎关注陕西华路 5da5f58a3f902c739c3860b28afed47c de60ee00e3144efbd37c38f1f6579fa8 de60ee00e3144efbd37c38f1f6579fa8 de60ee00e3144efbd37c38f1f6579fa8

可以看出,使用UTF-8编码会与其它编码产生不同的MD5值                    。而对于英文来说      ,则没有区别             。

stay hungry stay foolish d0653ce06bdc9fad39d9ac2312eb8b34 d0653ce06bdc9fad39d9ac2312eb8b34 d0653ce06bdc9fad39d9ac2312eb8b34 d0653ce06bdc9fad39d9ac2312eb8b34

md5算法除了对字符串外                    ,对于任何字节流对象都可以使用             ,尤其对文件的处理更是极为有用      ,例如:

下载文件时进行确认。从互联网下载文件时                    ,为了确保文件下载时没有出现错误             ,或者被篡改(植入病毒),可以对下载后的文件进行md5的计算                    ,并且与提供者发布的md5值进行比较                    ,如果相同则可以放心使用                    。

对目录下的不同名称的文件去重                    。相对于根据文件名称       、大小与时间这些非常容易变化的不可靠信息来说,对文件进行md5计算去重是非常准确的。相同的md5可以确定(极小概率不正确)是相同的文件             。假设一个图片文件             ,被多次复制更名成为不同的文件名                    ,经过md5计算完全可以判断为同一个文件                    。

对文件的md5计算也非常简单       ,以下代码简单的演示了主要代码片断       。

@property def md5(self) -> str: """ 对文件做MD5操作,并且返回对应的MD5值 Returns: str: md5 """ with self._filename.open(rb) as fr: return hashlib.md5(fr.read()).hexdigest()

使用默认的方式对所有文件进行相同的md5计算             ,就不必顾及编码格式了             。

声明:本站所有文章                    ,如无特殊说明或标注       ,均为本站原创发布                    。任何个人或组织      ,在未征得本站同意时                    ,禁止复制                   、盗用             、采集       、发布本站内容到任何网站                    、书籍等各类媒体平台       。如若本站内容侵犯了原著者的合法权益             ,可联系我们进行处理      。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
热血江湖手游哪个版本玩的人多些(热血江湖xp私服)