Python 加密模块实战:Base64、Hashlib 与加盐机制

一颗松果
一颗松果
发布时间:2026-10-11 | 2人浏览过
原创

本文详解 Python 中的常用加密与编码模块。通过 base64 模块实现数据的编码与解码,利用 hashlib 模块进行 MD5、SHA 系列哈希计算。文章重点演示了如何将字符串转为二进制字节进行加密,并介绍了加盐(Salt)机制的原理与实现,以提升密码存储的安全性。

Base64 编码与解码

Python 内置的 base64 模块提供了多种编码方式,包括 base64、base32、base16、base85 以及 urlsafe_base64。在 Python 3.x 中,该模块的输入和输出通常以二进制(bytes)形式处理,这与 Python 2.x 中支持字符串形式的处理方式有所不同。

Base64 编码的底层调用依赖于 binascii 模块,具体通过 b2a_base64() 进行编码,通过 a2b_base64() 进行解码。以下代码演示了如何使用 base64 模块对字符串进行编码并还原:

import base64
s = 'hello, world'
# 编码:将字符串转为二进制后编码
base64.b64encode(bytes(s, 'ascii'))
# 输出: b'aGVsbG8sIHdvcmxk'

# 解码:对编码后的二进制数据进行解码
base64.b64decode(base64.b64encode(bytes(s, 'ascii')))
# 输出: b'hello, world'

哈希加密:MD5 与 SHA 系列

在 Python 3.x 中,md5 模块已被移除,统一通过 hashlib 模块进行哈希计算。与 Python 2.x 不同,Python 3.x 要求必须使用二进制字节串(bytes)进行 MD5 加密,不能直接处理 unicode 字符。SHA1 等其他哈希算法的操作方式与 MD5 类似。

MD5 加密实现

MD5 加密的结果是一个固定长度为 32 位的十六进制字符串。由于加密过程是不可逆的,网络上所谓的“MD5 解密”实际上是通过查询常用密码加密后的数据库(即撞库)来实现的。以下代码展示了如何计算字符串的 MD5 值:

import hashlib
m = hashlib.md5()
m.update(b'hello, world!')
print(m.hexdigest())
# 输出: '3adbbad1791fbae3ec908894c4963870'

在实际开发中,如果字符串无法直接加密,需先通过 .encode() 将其转换为二进制类型。例如处理密码时:

import hashlib
password='123456'
# 字符串需先转为二进制类型才能加密
print(password.encode())
# 输出: b'123456'

m = hashlib.md5(password.encode())
# 使用 hexdigest() 输出加密后的十六进制内容
print(m.hexdigest())

若需查看加密模块支持的所有方法,可使用 Python 内置的 dir() 函数打印变量所有方法。

SHA 系列与其他校验

除了 MD5,hashlib 还支持 sha1、sha224、sha256 等算法。SHA 系列生成的字符串长度更长,安全性也更高。示例代码如下:

import hashlib
m = hashlib.sha1()
m.update(b'hello, world!')
print(m.hexdigest())
# 输出: '1f09d30c707d53f3d16c530dd73d70a6ce7596a9'

此外,Python 提供了两种计算 CRC32 校验值的方法,分别通过 zlib 和 binascii 模块实现:

import zlib
import binascii
s = b'hello, world!'
print(zlib.crc32(s))
# 输出: 1486392595
print(binascii.crc32(s))
# 输出: 1486392595

加盐(Salt)机制

为了降低密码被反解的可能性,提高安全性,通常会在明文密码后随机添加一个字符串再进行加密,这个随机字符串被称为“盐”(Salt)。以下代码演示了如何实现带盐值的 MD5 加密:

import hashlib

def my_md5(s:str, salt=None):
    s = str(s)
    if salt:
        s = s + salt  # 如果有盐值,则拼接盐
    m = hashlib.md5(s.encode())
    return m.hexdigest()

通过这种方式,即使两个用户使用了相同的密码,由于盐值不同,最终生成的哈希值也会不同,从而有效抵御撞库攻击。

以上就是 Python 加密模块实战:Base64、Hashlib 与加盐机制的详细内容,更多关于 Python 加密技术的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表