hc339

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

哈希的英文是Hash,中文可翻译成散列或者哈希,它其实就是一个算法,最简单的算法就是加减乘除,比方,我设计个数字算法,输入+5=输出,比如我输入1,输出为6;输入2,输出为7。

哈希算法不过是一个更为复杂的运算,它的输入可以是字符串,可以是数据,可以是任何文件,经过哈希运算后,变成一个固定长度的输出,该输出就是哈希值。但是哈希算法有一个很大的特点,就是你不能从结果推算出输入。

如上图所示,输入“我爱你”三个字,经过哈希运算后,会得到一个随机数列,而且不管你的输入文件多大,最后得到的结果都是这么一个固定长度的数列,即使你输入的是一部电影,输出也是这么大。而且数列不能推导出输入。

哈希有什么好处呢?比方说我们从服务器下载一个软件,如果这个软件被黑客更改了,那么我们下载的就不是原来的软件,如果是银行客户端可能就会有账户被盗的风险,但是有了哈希运算后,我们可以把下载的软件经过哈希运算后得到哈希值,然后把哈希值跟软件发行方公布的哈希值对比,就知道软件是否有被篡改了。同样比如我们登陆网站的密码也是一个很好的哈希运用,网站服务器如果读取的是我们的密码,那不是很危险吗,有了哈希,服务器只用匹配哈希就可以了,而不用读取我们的隐私。

python语言hash示例:

import hashlib

hashObj = hashlib.sha256()      #创建sha256的HASH对象
sign = "hello world"
hashObj.update(sign.encode("utf-8"))  #把字符串 转换为 bytes ,用update 进行HSAH
print(hashObj.hexdigest())       #打印hash结果
# b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

 

无论sign 是什么,哈希值的长度都是一样的,最后得到的结果都是这么一个固定长度的数列,哈希对象不同的创建方法会有不同的固定长度。

 

import hashlib

hashObj = hashlib.md5()          #创建MD5的HASH对象
sign = "hello world"
hashObj.update(sign.encode("utf-8"))   #把字符串 转换为 bytes ,用update 进行HSAH
print(hashObj.hexdigest())        #打印hash结果
# 5eb63bbbe01eeed093cb22bb8f5acdc3

posted on 2018-09-19 20:55  hc339  阅读(322)  评论(0)    收藏  举报