搜索

查看: 3154|回复: 11

[Python] Python base64和hashlib模块及用法详解

[复制链接]
发表于 2023-5-4 17:18:37 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:18:37 3154 11 看全部
目录
  • 一、base64模块
  • 1、对字符串编解码
  • 2、对URL编解码
  • 二、hashlib模块
  • 1、hashlib模块
  • 1.1 常用属性
  • 1.2 常用方法
  • 1.3 使用步骤
  • 2、MD5(消息摘要算法)
  • 3、SHA-256(安全哈希算法)
    一、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)

    202302240933535.png

    202302240933535.png


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

    202302240933536.png

    202302240933536.png


    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模块的文章就介绍到这了,更多相关Python base64和hashlib模块内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-29 13:02:33 | 显示全部楼层
    落败的青春阳落s 2023-6-29 13:02:33 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-29 17:06:44 | 显示全部楼层
    风吹吹蛋蛋疼风w 2023-6-29 17:06:44 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    发表于 2023-6-29 22:29:54 | 显示全部楼层
    永远就三年疗 2023-6-29 22:29:54 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-30 02:10:12 | 显示全部楼层
    墙和鸡蛋 2023-6-30 02:10:12 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-30 09:07:09 | 显示全部楼层
    井底燕雀傥 2023-6-30 09:07:09 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-3 18:06:23 | 显示全部楼层
    dxf17 2023-7-3 18:06:23 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-6 03:37:29 | 显示全部楼层
    幸福341 2023-7-6 03:37:29 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-7-6 08:26:30 | 显示全部楼层
    麻辣鸡翅 2023-7-6 08:26:30 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-7-6 16:40:15 | 显示全部楼层
    计划你大爷计j 2023-7-6 16:40:15 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表