• 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()
    

      

  • 相关阅读:
    android 拖放功能
    android 桌面文件夹ui美化
    instanceof 杂谈
    Android自定义长按事件
    launcher in android
    类似网易163TAB选项卡(标签)代码
    【新手入门教程】简洁纯CSS下拉导航菜单代码
    橘黄色的大气CSS菜单代码
    Flash效果的网站后台左侧Js多级展开菜单代码
    仿FLASH动感十足鼠标滑过放大的菜单代码
  • 原文地址:https://www.cnblogs.com/andy9468/p/13088102.html
Copyright © 2020-2023  润新知