zoukankan      html  css  js  c++  java
  • python模块——hashlib模块(简单文件摘要算法实现)

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    __author__ = "loki"
    
    # Usage: hashlib模块
    
    import hashlib
    import time
    
    
    # wrapper function calc length and use time
    def len_type_tools(res):
        def wrapper(*args, **kwargs):
            cur_time = time.time()
            len_res = len(res(*args, **kwargs))
            result = res(*args, **kwargs)
            end_time = time.time() - cur_time
            print('Primary HASH result length is {0}, use time {1:.2f}'.format(len_res, end_time))
            return result
        return wrapper
    
    
    def menu_list():
        func_list = {}
        for item in hashlib.__dict__:
            if str(item).startswith("sha") or str(item).startswith("md5"):
                func_list[item] = hashlib.__dict__[item]
        return func_list
    
    
    @len_type_tools
    def algol(data, num):
        if num != 1:
            user_choose = menu_list()[data[1]]()
            user_choose.update(data[0].encode("utf-8"))
            return user_choose.hexdigest()
        user_choose = menu_list()["md5"]()
        user_choose.update(data[0].encode("utf-8"))
        return user_choose.hexdigest()
    
    
    def file_read(path):
        with open(r"{}".format(path), 'rb') as file_info:
            file_bin = file_info.read()
            return file_bin
    
    
    def main():
        """
        .::hashlib small tools::.
            by: loki 2018-06-25
        format:
        >> <file_path> [algol]
        algol:
        md5(default)
        sha1
        sha224
        sha256
        sha384
        sha512
        example:
        >> c:\test.txt sha1
        :return hash_value
        """
        print(main.__doc__)
        file_path = input('>>').strip()
        file_path = file_path.split()
        argument_num = len(file_path)
        print(algol(file_path, argument_num))
    
    
    if __name__ == '__main__':
        main()
        time.sleep(15)

    小结:

      再这个hashlib模块学习中,顺便回顾了下装饰器。也运用了下魔术方法__dict__功能

  • 相关阅读:
    Linux_搭建NFS服务(基础)
    Linux_配置主DNS服务(基础)
    Linux_配置辅助DNS服务(基础)
    Linux_配置本地YUM源(RHEL8)
    9. Mybatis plugins标签 实现分页
    27. SpringBoot 切换内嵌Servlet容器
    8. Mybatis typeHandlers标签
    63. VUEX Getters基本使用
    62. State单一状态树概念
    61 . VUEX state 和 mutations
  • 原文地址:https://www.cnblogs.com/Cong0ks/p/9223615.html
Copyright © 2011-2022 走看看