哈希算法是一种将任意长度的数据转换成固定长度的数据的过程。该过程是不可逆的,这意味着很难从哈希值还原原始数据。哈希算法在许多应用中很有用,包括:
数据完整性验证:哈希算法可以用来验证数据是否被篡改。
密码学:哈希算法可以用来创建密码。
数据压缩:哈希算法可以用来压缩数据。
分布式存储:哈希算法可以用来存储数据。
区块链:哈希算法在区块链技术中很重要。
哈希算法有许多好处,包括:
安全性:哈希算法很难破解,这使得它们非常适合安全应用。
效率:哈希算法很高效,这使它们适合大量数据的处理。
可扩展性:哈希算法可扩展,这使得它们适合大规模应用。
总体而言,哈希算法是一种强大的工具,在许多应用中很有用。
class StreamHasher():
"""摘要生成器"""
def __init__(self, algorithm='md5', size=4096):
"""初始化方法
@params:
algorithm - 哈希摘要算法
size - 每次读取数据的大小
"""
self.size = size
cls = getattr(__import__('hashlib'), algorithm.lower())
self.hasher = cls()
def digest(self, file_stream):
"""生成十六进制的摘要字符串"""
# log = file_stream.read(self.size)
# while log:
# self.hasher.update(log)
# log = file_stream.read(self.size)
for data in iter(lambda: file_stream.read(self.size), b''):
self.hasher.update(data)
return self.hasher.hexdigest()
def __call__(self, file_stream):
return self.digest(file_stream)
def main():
"""主函数"""
hasher1 = StreamHasher()
hasher2 = StreamHasher('sha1')
hasher3 = StreamHasher('sha256')
with open('zbar-0.10.tar.bz2', 'rb') as file_stream:
print(hasher1.digest(file_stream))
file_stream.seek(0, 0)
print(hasher2.digest(file_stream))
file_stream.seek(0, 0)
print(hasher3(file_stream))