温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python base64和hashlib模块如何使用

发布时间:2023-02-24 11:09:33 来源:亿速云 阅读:121 作者:iii 栏目:开发技术

本文小编为大家详细介绍“Python base64和hashlib模块如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python base64和hashlib模块如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    一、base64模块

    base64模块提供了在二进制数据和可打印ASCII字符间编解码的功能,包括 RFC3548中定义的Base16, Base32, Base64, Ascii85, Base85等编码。

    base64模块属于标准库,无需进行安装,导入即可使用。

    base64模块支持两种接口:

    • bytes类型数据进行base64编码。即将类字节对象编码为由ASCII可打印字符表示的bytes。

    • base64编码的bytes类型进行解码。即将类字节对象或纯ASCII字符组成的Unicode字符串解码为bytes。

    注意:编码与解码的处理对象是byte,及参数必须是二进制数据,才可以进行正常使用。

    1、对字符串编解码

    import base64
    
    str = "Hello Python"
    
    # 默认以utf-8编码
    byte_str = str.encode("utf-8")
    b64_str = base64.b64encode(byte_str)
    print(b64_str)
    
    print("-------------")
    
    # 默认以utf-8解码
    byte_str2 = base64.b64decode(b64_str)
    str2 = byte_str2.decode("utf-8")
    print(str2)

    Python base64和hashlib模块如何使用

    2、对URL编解码

    import base64
    
    url = "http://www.baidu.com?k1=v1&k2=值二"
    
    # 默认以utf-8编码
    byte_url = url.encode("utf-8")
    b64_url = base64.b64encode(byte_url)
    print(b64_url)  # b'aHR0cDovL3d3dy5iYWlkdS5jb20/azE9djEmazI95YC85LqM'
    
    print("-------------")
    
    # 默认以utf-8解码
    byte_url2 = base64.b64decode(b64_url)
    url2 = byte_url2.decode("utf-8")
    print(url)  # http://www.baidu.com?k1=v1&k2=值二

    二、hashlib模块

    1、hashlib模块

    hashlib是Python的内置模块,提供了多种安全方便的常见摘要算法,其中主要包括MD5,SHA1,SHA256,SHA384,SHA512等。这些摘要方法在使用上通用,返回带有同样接口的hash对象,对算法的选择,差别只在于构造方法的选择。

    摘要算法又称哈希算法、散列算法。它通过一个函数算法,把任意长度的数据转换为一个长度固定的数据串)。

    1.1 常用属性
    import hashlib
    
    #列出hashlib内容
    print(dir(hashlib))
    #列出所有加密算法
    print(hashlib.algorithms_available) 
    print(hashlib.algorithms_guaranteed)
    
    #产生的散列字节大小。
    h.digest_size
    
    #哈希内部块的大小
    h.block_size
    1.2 常用方法
    # 创建指定加密模式的hash对象
    hash.new([arg])
    
    # 更新哈希对象以字符串参数。
    # 如果同一个hash对象重复调用该方法,m.update(a); m.update(b) 等价于 m.update(a+b)
    hash.update(arg)
    
    # 返回摘要,作为二进制数据字符串值。
    hash.digest()
    
    # 返回摘要,作为十六进制数据字符串值
    hash.hexdigest()
    
    # 复制
    hash.copy()
    1.3 使用步骤

    方式一:

    import hashlib
    
    # -------以 MD5为例-------
    # 1. 创建hash工厂
    m = hashlib.md5()
    
    # 2. 在内存里面加载二进制数据
    # m.update('Hello'.encode('utf-8'))
    # m.update('Python'.encode('utf-8'))
    ## 等价于,如果二进制数据很长的话,可以分开更新
    m.update('Hello Python'.encode('utf-8'))
    
    print(m.digest_size)  # 16
    print(m.block_size)  # 64
    
    # 3、返回十六进制str摘要值
    hash_value = m.hexdigest()
    print(hash_value)  # a709c173220d6185d12248faa9f40ac8
    
    # 3.返回bytes格式的消息摘要
    print(m.digest())  # b'\xa7\t\xc1s"\ra\x85\xd1"H\xfa\xa9\xf4\n\xc8'

    方式二:

    import hashlib
    
    '''
    一个通用的构造方法,
        name:是某个算法的字符串名称,
        data:是可选的bytes类型待摘要的数据。
    '''
    m = hashlib.new('md5', b'Hello Python')
    print(m.hexdigest())
    print(m.digest())
    
    print("-----复制方法测试-----")
    
    # 复制
    m2 = m.copy()
    print(m2)
    print(m2.hexdigest())
    print(m2.digest())

    Python base64和hashlib模块如何使用

    2、MD5(消息摘要算法)

    MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位的散列值(hash value),用于确保信息传输完整一致。

    示例代码如下:

    import hashlib
    
    def jm_md5(password):
        # 构建MD5对象
        m = hashlib.md5()
        # 自定义加盐值
        m.update('abc'.encode(encoding='utf-8'))
        m.update(password.encode(encoding='utf-8'))
        # 返回十六进制str摘要值
        password_md5 = m.hexdigest()
        return password, password_md5
    res = jm_md5('123456')
    print(res) # ('123456', '0659c7992e268962384eb17fafe88364')

    3、SHA-256(安全哈希算法)

    安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。验证数据的完整性。

    科学家们推出了SHA1,SHA224,SHA256,SHA384,SHA512,当然位数越长,破解难度越大,但同时生成加密的消息摘要所耗时间也更长。常用的还是SHA-256。

    示例代码如下:

    import hashlib
    
    def jm_sha256(password):
        # 构建MD5对象
        m = hashlib.sha256()
        # m = hashlib.sha512()
    
        # 自定义加盐值
        m.update('abc'.encode(encoding='utf-8'))
        m.update(password.encode(encoding='utf-8'))
        # 返回十六进制str摘要值
        password_md5 = m.hexdigest()
        return password, password_md5
    res = jm_sha256('123456')
    print(res) 
    # ('123456', 'a03c32fcd351cba2d9738622b083bed022ef07793bd92b59faea0207653f371d')

    读到这里,这篇“Python base64和hashlib模块如何使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI