zoukankan      html  css  js  c++  java
  • python代码-实现对文件内容的哈希

    python代码-实现对文件内容的哈希

    import hashlib
    import base64
    
    
    # 对文件内的数据进行sha1哈希运算。迭代方式,可以处理大文件
    def SHA1FileWithName(fileName, out_is_base64_bytes=True, block_size=64 * 1024):
        '''sha1 file with filename (SHA1)
        :param fileName: 文件名
        :param out_is_base64_bytes: 输出类型。True返回按照base64编码后的字节流。False返回16进制的字符串
        :param block_size: 每次读取文件中的数据量
        :return: 按照out_is_base64_bytes的条件返回
        '''
        with open(fileName, 'rb') as f:
            sha1 = hashlib.sha1()
            while True:
                data = f.read(block_size)
                if not data:
                    break
                sha1.update(data)
    
            # 如果输出base64编码后的字节流bytes。
            if out_is_base64_bytes:
                # 以二进制的字节流返回。如:b'xc0cx96xcex1cxd9ixe1xbfixb7xb4xf8:x1exa5'
                sha1_bin_bytes = sha1.digest()
                print(sha1_bin_bytes)
                # 将二进制的字节流按照base64规则编码,返回base64的字节流。如:b'wGOWzhzZaeG/abe0+DoepQ=='
                sha1_base64_bytes = base64.b64encode(sha1_bin_bytes)
    
                return sha1_base64_bytes
    
            # 如果输出16进制的字符串str。
            else:
                # 以16进制的字符串返回。如:c06396ce1cd969e1bf69b7b4f83a1ea5
                sha1_hex_str = sha1.hexdigest()
                print(sha1_hex_str)
    
                return sha1_hex_str
    
    
    # 对文件内的数据进行md5哈希运算。迭代方式,可以处理大文件
    def MD5FileWithName(fileName, out_is_base64_bytes=True, block_size=64 * 1024):
        '''md5 file with filename (MD5)
        :param fileName: 文件名
        :param out_is_base64_bytes: 输出类型。True返回按照base64编码后的字节流。False返回16进制的字符串
        :param block_size: 每次读取文件中的数据量
        :return: 按照out_is_base64_bytes的条件返回
        '''
        with open(fileName, 'rb') as f:
            md5 = hashlib.md5()
            while True:
                data = f.read(block_size)
                if not data:
                    break
                md5.update(data)
    
            # 如果输出base64编码后的字节流bytes。
            if out_is_base64_bytes:
                # 以二进制的字节流返回。如:b'xc0cx96xcex1cxd9ixe1xbfixb7xb4xf8:x1exa5'
                md5_bin_bytes = md5.digest()
                # print(md5_bin_bytes)
                # 将二进制的字节流按照base64规则编码,返回base64的字节流。如:b'wGOWzhzZaeG/abe0+DoepQ=='
                md5_base64_bytes = base64.b64encode(md5_bin_bytes)
    
                return md5_base64_bytes
    
            # 如果输出16进制的字符串str。
            else:
                # 以16进制的字符串返回。如:c06396ce1cd969e1bf69b7b4f83a1ea5
                md5_hex_str = md5.hexdigest()
                # print(md5_hex_str)
    
                return md5_hex_str
    
    
    if __name__ == '__main__':
        # # 对文件进行md5哈希
        # fileName = "test.txt"
        # md5_hash = MD5FileWithName(fileName, False)  # 返回16进制字符串str。
        # # md5_hash = MD5FileWithName(fileName, True)  # 返回字节流bytes。
        # print(type(md5_hash))
        # print(md5_hash)
        # print("====以下是判断:====")
        #
        # # 如果是字节流
        # if isinstance(md5_hash, bytes):
        #     print("字节流bytes:%s" % md5_hash)
        #     # 字节流转字符串
        #     md5_str = bytes.decode(md5_hash)  # 字节流bytes转为字符串str
        #     print(type(md5_str))
        #     print("转为字符串str:%s" % md5_str)
        #
        # # 如果是字符串
        # else:
        #     print("字符串str: %s" % md5_hash)
        # print()
    
        # 对文件进行sha1哈希
        fileName = "test.txt"
        # sha1_hash = SHA1FileWithName(fileName, False)  # 返回16进制字符串str。
        sha1_hash = SHA1FileWithName(fileName, True)  # 返回字节流bytes。
        # # 16进制转为10进制
        # print("111111111111")
        # jz10 = int(sha1_hash, 16)
        # # 10进制转为2进制
        # print(type(jz10))
        # print("10进制:%s" % jz10)
        # jz2 = format(jz10, "b")
        # print(type(jz2))
        # print("2进制:%s" % jz2)
        # print(type(sha1_hash))
        print(sha1_hash)
        print("====以下是判断:====")
    
        # 如果是字节流
        if isinstance(sha1_hash, bytes):
            print("字节流bytes:%s" % sha1_hash)
            # 字节流转字符串
            sha1_str = bytes.decode(sha1_hash)  # 字节流bytes转为字符串str
            print(type(sha1_str))
            print("转为字符串str:%s" % sha1_str)
    
        # 如果是字符串
        else:
            print("字符串str: %s" % sha1_hash)
        print()
    

      

  • 相关阅读:
    <Graph> Topological + Undirected Graph 310 Union Find 261 + 323 + (hard)305
    <Topological Sort> ( 高频, hard) 269
    <Stack> (高频)394 ( 高频)224
    <DFS & BFS> 286 339 (BFS)364
    <Matrix> 311 378
    <Binary Search> 81 (高频)34 (很难hard, 高频)315 (hard)354
    <LinkedList> 369 (高)143 (第二遍)142 148
    <DP> (高频)139 375 374 (DP hard)312
    <BackTracking> permutation 254 47 60
    <Tree> 298 250 366 199(高频) 98(高频)
  • 原文地址:https://www.cnblogs.com/andy9468/p/13088102.html
Copyright © 2011-2022 走看看