hashlib加密「建议收藏」

hashlib加密「建议收藏」加密算法介绍HASHHash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。…

大家好,又见面了,我是你们的朋友全栈君。

加密算法介绍
HASH
Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。
简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值.也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系

MD5
什么是MD5算法
MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位的散列值(hash value),用于确保信息传输完整一致。MD5的前身有MD2、MD3和MD4。
MD5功能:
输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);
不同的输入得到的不同的结果(唯一性);

MD5算法的特点
压缩性:任意长度的数据,算出的MD5值的长度都是固定的
容易计算:从原数据计算出MD5值很容易
抗修改性:对原数据进行任何改动,修改一个字节生成的MD5值区别也会很大
强抗碰撞:已知原数据和MD5,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

MD5算法是否可逆?
MD5不可逆的原因是其是一种散列函数,使用的是hash算法,在计算过程中原文的部分信息是丢失了的。

MD5用途
防止被篡改:
比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。
比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布由安装文件得到的MD5输出结果。
SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5.

防止直接看到明文:
现在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。这样就算不法分子得到数据库的用户密码的MD5值,也无法知道用户的密码。(比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。)

防止抵赖(数字签名):
这需要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘要信息并做好记录。若以后A说这文件不是他写的,权威机构只需对此文件重新产生摘要信息,然后跟记录在册的摘要信息进行比对,相同的话,就证明是A写的了。这就是所谓的“数字签名”。

SHA-1
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。

SHA是美国国家安全局设计的,由美国国家标准和技术研究院发布的一系列密码散列函数。

由于MD5和SHA-1于2005年被山东大学的教授王小云破解了,科学家们又推出了SHA224, SHA256, SHA384, SHA512,当然位数越长,破解难度越大,但同时生成加密的消息摘要所耗时间也更长。目前最流行的是加密算法是SHA-256 .

MD5与SHA-1的比较
由于MD5与SHA-1均是从MD4发展而来,它们的结构和强度等特性有很多相似之处,SHA-1与MD5的最大区别在于其摘要比MD5摘要长32 比特。对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度:MD5是2128数量级的操作,SHA-1是2160数量级的操作。产生具有相同摘要的两个报文的难度:MD5是264是数量级的操作,SHA-1 是280数量级的操作。因而,SHA-1对强行攻击的强度更大。但由于SHA-1的循环步骤比MD5多80:64且要处理的缓存大160比特:128比特,SHA-1的运行速度比MD5慢。

Python的 提供的相关模块
用于加密相关的操作,3.x里用hashlib代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

import hashlib

md5

m = hashlib.md5()
m.update(b”Hello”)
m.update(b”It’s me”)
print(m.digest()) # 返回2进制格式的hash值
m.update(b”It’s been a long time since last time we …”)
print(m.hexdigest()) # 返回16进制格式的hash值

sha1

s1 = hashlib.sha1()
s1.update(“孙悟空”.encode(“utf-8”))
s1.hexdigest()

sha256

s256 = hashlib.sha256()
s256.update(“孙悟空”.encode(“utf-8”))
s256.hexdigest()

sha512

s512 = hashlib.sha256()
s512.update(“孙悟空”.encode(“utf-8”))
s512.hexdigest()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132484.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql读写分离怎么实现(数据库读写分离实现)

    为什么要实现mysql读写分离大型网站为了解决大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器来处理如此多的数据库连接操作,数据库必然会崩溃,特别是数据丢失的话,后果更是不堪设想。这时候,我们会考虑如何减少数据库的连接,下面就进入我们今天的主题。​利用主从数据库来实现读写分离,从而分担主数据库的压力。在多个服…

  • Android面试题之Activity篇

    Android面试题之Activity篇Activity篇目录前言一、Activity1、什么是Activity?2、请描述一下Activity生命周期3、请描述一下Activity的四个状态4、两个Activity之间传递数据,除了intent,广播接收者,contentprovider还有啥?5、Android中的Context,Activity,Appliction有什么区别?6、Context是什么?7、如何保存Activity的状态?8、横竖屏切换时Activity的生命周期9、两个Activity

  • Codeforces Round #256 (Div. 2/B)/Codeforces448B_Suffix Structures(字符串处理)

    Codeforces Round #256 (Div. 2/B)/Codeforces448B_Suffix Structures(字符串处理)

  • C语言学生成绩管理系统详解[通俗易懂]

    文章目录一、系统概述二、数据类型三、自定义函数说明四、运行界面五、源代码源代码请直接跳到最后引言:最近写了C语言的大作业,感觉做得还行,记录一下,给后人一些参考,给自己留更深印象方便后续改进!不知道发了这篇博客会不会认为我抄袭…害怕.jpg一、系统概述使用单向链表和文件作为基本数据结构,设计一个学生成绩管理程序,管理某学校学生成绩。[1]插入数据[2]修改对应数据项的数据[3]删除对应学号的信息[4]查找某学号的信息[5]查找不及格学生[6]对学生成绩进行排名[7]统计各个等级的学生

  • vue项目刷新当前页面的三种方法[通俗易懂]

    vue项目刷新当前页面的三种方法[通俗易懂]本文介绍了vue项目刷新当前页面的三种方法,本文图文并茂给大家介绍的非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下。 想必大家在刨坑vue的时候也遇到过下面情形:比如在删除或者增加一条记录的时候希望当前页面可以重新刷新或者如下面这种:如果希望点击确定的时候,Dialog对话框关闭的时候,当前http://localhost:9530/#/supplier/supplierAll页面可以重新刷新下那么表格的数据可以重新加载,Dialog对话框设置的数据可以在确定后刷新出现在页面上

    2022年10月17日
  • pip卸载包命令_pip怎么卸载

    pip卸载包命令_pip怎么卸载在用pip卸载Django相关的模块时,由于操作不当,造成异常,结果再次执行piplist时,发现如下结果通过pip尝试了半天,对于这些异常的列表信息无法处理。最后,在相应的包安装目录下(本例为C:\ProgramFiles\Python37\Lib\site-packages)查看到如下情况将所有有前缀的文件夹(除了__pycache__文件夹)删除,重新执行pip…

    2022年10月17日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号