版权声明: https://blog.csdn.net/Geroge_lmx/article/details/82833135
一. 哈希算法即SHA算法,安全散列算法:
python中的字典是一个散列表,由一个散列函数和数组实现。用于创建散列表的散列函数,接受一个字符串,返回数组的索引号。SHA也是一个散列函数,根据一个字符串,生成另一个字符串。SHA具有以下特点:
1. 同一个SHA函数,生成的字符串长度是固定的;
2. 无法通过散列值,推导出原始字符串;
3. SHA是局部不敏感的,如果修改字符串中的一个字符,得到的散列值将截然不同,因此攻击者将无法通过散列值是否相似来破解密码;
SHA散列函数应用于比较两个文件是否相同,存储,检查密码。如下代码封装了两个常用的方法,哈希一个字符串以及哈希一个文件:
import hashlib
def hashStr(strInfo):
"""对字符串进行hash"""
hashObj = hashlib.sha256()
hashObj.update(strInfo.encode("utf-8"))
return hashObj.hexdigest()
CHUNCKSIZE = 2048
def hashFile(fileName):
"""对文件进行hash"""
hashObj = hashlib.sha256()
with open(fileName, 'rb') as f:
while True:
# 这个地方不能一次性读取出来,如果文件太大,内存不够
chunk = f.read(CHUNCKSIZE)
if not chunk:
break
hashObj.update(chunk)
return hashObj.hexdigest()
print(hashStr("hello"))
print(hashFile("测试.txt"))
二. Simhash局部敏感的散列算法
对于局部敏感的散列算法,如果对字符串做细微的修改,那么simhash生成的散列值也只存在细微的差别。利用这个特点,我们可以比较两个字符串的相似层度,这很有用!例如;
- 搜索引擎可以利用simhash判断网页是否已经被收集;
- 论文查重
- 上传涉及版权问题的文件,自动拒绝