Python base64和hashlib模块及用法详解
简介
在Python中,Base64和hashlib是常用的加密和解密模块,Base64模块用来处理二进制数据,将其转换为可打印的ASCII字符,而hashlib模块则用来生成各种哈希算法所需的数字摘要。以下是对这两个模块的详细介绍及使用方法。
Base64模块
Base64编码与解码方法
Base64编码是一种将二进制数据转换为ASCII字符的编码方式,常被用来在HTTP协议、电子邮件、网页等场景中传输和存储数据。Base64编码原理是将原始数据按照3个字节一组进行编码,每组3个字节总共有24位,而Base64编码后为4个字节一组,每组4个字节总共有32位,因此Base64编码后数据长度为原来的4/3。
Python中可以使用Base64模块进行Base64编码和解码。Base64模块提供了两个函数:base64.b64encode(data)
和base64.b64decode(data)
,分别用于对数据进行Base64编码和解码。其中,data
是二进制形式的数据。
import base64
# Base64编码示例
data_encode = b"Python Base64 Example"
data_base64 = base64.b64encode(data_encode)
print(data_base64) # 输出 b'UHl0aG9uIEJhc2U2NCBFeGFtcGxl'
# Base64解码示例
data_decode = base64.b64decode(data_base64)
print(data_decode) # 输出 b'Python Base64 Example'
Base64的URL安全编码
Base64编码原本是用来在HTTP协议等场景中传输和存储数据,但有时会出现字符集不兼容的问题。为解决这个问题,Base64衍生出了URL安全编码。URL安全编码在Base64的编码过程中使用了一些URL安全、不易被转义、易传输的符号,例如使用-
代替+
,使用_
代替/
。Python中如下进行URL安全编码,其余同Base64编码/解码方法。
import base64
# URL安全编码示例
data_encode = b"Python Base64 Example"
data_base64_url = base64.urlsafe_b64encode(data_encode)
print(data_base64_url) # 输出 b'UHl0aG9uIEJhc2U2NCBFeGFtcGxl'
hashlib模块
常见哈希算法及用法
哈希算法是一种将任意长度的消息压缩到一定长度的消息摘要的算法。不同的哈希算法产生的摘要长度和强度不同,一些常见的哈希算法有MD5、SHA1、SHA256等。Python中的hashlib模块提供了这些常用的哈希算法实现,并提供了常用的API(Application Programming Interface)。
例如计算一个字符串的SHA256哈希值:
import hashlib
s = 'Python hashlib Example'
sha256 = hashlib.sha256()
sha256.update(s.encode('utf-8'))
print(sha256.hexdigest()) # 输出 54cbe52c7ba5e26b96b25845e95f56c81ea1d5d2bacf8d4e23fd90f3f44ed2e2
其中,首先创建一个sha256对象,然后通过update()
方法向其中传入要计算哈希的数据,这里的数据为字节形式,需通过编码方式指明。接着通过hexdigest()
方法计算哈希值并打印结果。
哈希算法的应用
哈希算法常被用来加密密码,为每个用户创建一个唯一的哈希值,并将其保存在数据库中。登录时,用户输入的密码也经过哈希运算,将其转换为哈希值,与数据库中保存的哈希值进行比对,以验证密码是否正确。
例如使用哈希算法SHA256加密密码并存储,以及登录认证流程:
import hashlib
# 用户注册,存储哈希值
def register(username, password):
sha256 = hashlib.sha256()
sha256.update(password.encode('utf-8'))
pwd_hash = sha256.hexdigest()
with open('users.db', 'a') as f:
f.write(f'{username}:{pwd_hash}\n')
# 用户登录,认证哈希值
def login(username, password):
sha256 = hashlib.sha256()
sha256.update(password.encode('utf-8'))
pwd_hash = sha256.hexdigest()
with open('users.db', 'r') as f:
for line in f:
u, h = line.strip().split(':')
if u == username and h == pwd_hash:
print('Login successful!')
return
print('Username or password incorrect!')
# 用户注册示例
register('Alice', '123456')
register('Bob', '123456')
register('Charlie', '123456')
# 用户登录示例
login('Alice', '123456')
login('Bob', '654321') # 密码错误
login('Eve', '123456') # 用户名不存在
以上代码通过使用SHA256哈希算法实现了一个简单的用户注册和登录系统。其中,用户在注册时,输入用户名和密码,将密码进行哈希计算并存储在文件中;登录时,输入用户名和密码,哈希计算后与存储在文件中的哈希值进行比对。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python base64和hashlib模块及用法详解 - Python技术站