哈希算法

哈希算法:

把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。

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

python中用于获取一个对象(字符串/数字)的哈希值

1 >>>hash('test')            # 字符串
2 2314058222102390712
3 >>> hash(1)                 # 数字
4 1
5 >>> hash(str([1,2,3]))      # 集合
6 1335416675971793195
7 >>> hash(str(sorted({'1':1}))) # 字典
8 7666464346782421378
9 >>>

在 hash() 对对象使用时,所得的结果不仅和对象的内容有关,还和对象的 id(),也就是内存地址有关。

 1 class Test:
 2     def __init__(self, i):
 3         self.i = i
 4 for i in range(10):
 5     t = Test(1)
 6     print(hash(t), id(t))
 7 #输出结果
 8 (277855628, 4445690048)
 9 (277855637, 4445690192)
10 (277855628, 4445690048)
11 (277855637, 4445690192)
12 (277855628, 4445690048)
13 (277855637, 4445690192)
14 (277855628, 4445690048)
15 (277855637, 4445690192)
16 (277855628, 4445690048)
17 (277855637, 4445690192)

一种用途:

hash() 函数的对象字符不管有多长,返回的 hash 值都是固定长度的,也用于校验程序在传输过程中是否被第三方(木马)修改,

如果程序(字符)在传输过程中被修改hash值即发生变化,如果没有被修改,则 hash 值和原始的 hash 值吻合,

只要验证 hash 值是否匹配即可验证程序是否带木马(病毒)。

1 name1='正常程序代码'
2 name2='正常程序代码带病毒'
3 print(hash(name1)) # 2403189487915500087
4 print(hash(name2)) # -8751655075885266653

 

posted @ 2020-11-29 22:28  白羊大大  阅读(68)  评论(0编辑  收藏  举报