博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hash
阅读量:6236 次
发布时间:2019-06-22

本文共 2182 字,大约阅读时间需要 7 分钟。

Hash

  Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。

简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值.也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系,下次计算时会变

 

什么是MD5算法

  MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位的散列值(hash value),用于确保信息传输完整一致。MD5的前身有MD2、MD3和MD4。

MD5功能

输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);

不同的输入得到的不同的结果(唯一性);
MD5算法的特点                             

  1. 压缩性:任意长度的数据,算出的MD5值的长度都是固定的
  2. 容易计算:从原数据计算出MD5值很容易
  3. 抗修改性:对原数据进行任何改动,修改一个字节生成的MD5值区别也会很大
  4. 强抗碰撞:已知原数据和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写的了。这就是所谓的“数字签名”。

 

>>> hash('daf')-7246462577305244152>>> hash('00')-4431903837348298255>>> hash('mklmlkn')-6647042811225012932>>> ord('a')97>>> hash('mklmlkn')-6647042811225012932>>> import hashlib>>> m = hashlib.md5()>>> m.hexdigest()'d41d8cd98f00b204e9800998ecf8427e'>>> m.hexdigest()'d41d8cd98f00b204e9800998ecf8427e'>>> m.update(b'kevin')>>> m.hexdigest()'9d5e3ecdeb4cdb7acfd63075ae046672'>>> m.hexdigest()'9d5e3ecdeb4cdb7acfd63075ae046672'网上的解密是撞库。 >>> import hashlib>>> m = hashlib.md5()>>> m.update(b'alex')>>> m.hexdigest()'534b44a19bf18d20b71ecc4eb77c572f'

 

import hashlib word1 = b'abc'       # 只能传bytes类型 word2 = bytes('abc',encoding='utf-8') m_word1 = hashlib.md5(word1).hexdigest()  m_word2 = hashlib.md5(word2).hexdigest() print('word1',m_word1) print('word2',m_word2) output

word1 900150983cd24fb0d6963f7d28e17f72

word2 900150983cd24fb0d6963f7d28e17f72

 

转载于:https://www.cnblogs.com/wenyule/p/py-hash.html

你可能感兴趣的文章
awk数组学习1
查看>>
java基础语法
查看>>
浅谈《Linux就该这么学》
查看>>
DOM不同的结点类型
查看>>
深入理解Java虚拟机,gc输出参数
查看>>
Windows内存管理介绍
查看>>
组合继承
查看>>
拖拽对话框
查看>>
DOORS的引用类型
查看>>
Jmeter压力测试环境准备
查看>>
codeforces 982 c
查看>>
MySQL初识与安装
查看>>
安卓 权限 规则
查看>>
HashMap的实现原理 HashMap底层实现,hashCode如何对应bucket?
查看>>
Deployed component GUIs and figures have different look and feel than MATLAB desktop
查看>>
自定义UISlider
查看>>
构建方法
查看>>
“.NET研究”构建高性能ASP.NET站点之优化HTTP请求
查看>>
攻击法国海军病毒Conficker在中国网络同步蔓延
查看>>
软件测试——Junit的使用
查看>>