算法(二)--------SHA & Simhash

版权声明: 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判断网页是否已经被收集;
  • 论文查重
  • 上传涉及版权问题的文件,自动拒绝

猜你喜欢

转载自blog.csdn.net/Geroge_lmx/article/details/82833135
今日推荐