435 字
2 分钟
哈希算法-加密-编码
哈希算法 - 加密 - 编码
哈希算法 - 哈希摘要 - 数字签名 - 防篡改/保护敏感信息 哈希算法是一个单向运算的函数(单向哈希函数) 通过哈希算法可以将对象计算出哈希摘要但是哈希摘要无法还原成原来的对
Martin flower -代码有很多味道重复是最坏的一种 重构(refactor)
策略模式 加密解密 - 明文 ---- 加密 -----> 密文 ---- 解密 -----> 明文 对称加密 - 加密和解密使用同一个密钥 - AES 非对称加密 - 加密和解密使用不同的密钥(公钥和私钥)- RSA pip install pycryptodome
编码和解码 - 将内存中的二进制数据处理成其他的格式 - BASE64 BASE64 - 用64个字符(a-zA-Z0-9/+)表二进制数据示所有的
编码黑洞
中文/日文 —>iso -8859 -1 Latin —> ??
乱码 —>编码和解码的时候没用使用相同的字符集
utf-8 -Unicode的一种变长实现方案
import hashlib
class StreamHasher(object): """docstring for streamHasher""" def __init__(self, algorithm='md5', size=4096): self.size = size alg = algorithm.lower() if alg =='md5': self.hasher = hashlib.md5() elif alg == 'sha1': self.hasher = hashlib.sha1() elif alg == 'sha256': self.hasher = hashlib.sha256() elif alg == 'sha512': self.hasher = hashlib.sha512() else: raise ValueError('不支持指定的哈希算法')
# __call__ -魔术方法,调用对象的时候调用该方法 def __call__(self,stream): return self.to_digest(stream)
def to_digest(self, stream): '''生成摘要''' # b'' 是终止符,读文本文件时终止符为 '' hasher = self.hasher for buf in iter(lambda:stream.read(self.size), b''): hasher.update(buf) # 16进制的摘要 return hasher.hexdigest()
def to_sha256_digest(stream, block_size = 4096): '''生成 SHA256 摘要''' # b'' 是终止符,读文本文件时终止符为 '' hasher = hashlib.sha256() for buf in iter(lambda:stream.read(block_size), b''): hasher.update(buf) # 16进制的摘要 return hasher.hexdigest()
def main(): hasher = hashlib.md5() with open('aaa.png', 'rb') as f: sh = StreamHasher() print(sh.to_digest(f))
if __name__ == '__main__': main()





