Python的加密模块之hashlib与base64详解及常用加密方法
什么是加密模块?
加密模块是Python中用来实现加密的工具包,其主要包含以下几种类型:
- 哈希(Hash)加密:将任意长度的消息压缩到某一固定长度,且不可逆。
- 对称加密(Symmetric-Key):通过同一个秘钥同时对明文和密文进行加密和解密,常用算法有AES、DES等。
- 非对称加密(Asymmetric-Key):使用不同的秘钥进行加密和解密,常用算法有RSA、DSA等。
- 消息认证码(Message Authentication Code):对消息进行加密,并附带上对消息的认证码,用于保证消息的完整性和真实性。
hashlib加密模块
哈希(Hash)加密是一种将任意长度的消息压缩到某一固定长度,且不可逆的算法,常用于数据完整性校验和密码存储。hashlib模块提供了多种哈希算法,包括MD5、SHA1和SHA256等。
MD5加密
MD5算法是一种广泛使用的哈希算法,常用于生成数字指纹或对密码进行加密。
import hashlib
str = 'Hello World'
md5 = hashlib.md5()
md5.update(str.encode('utf-8'))
print("加密前:" + str)
print("加密后:" + md5.hexdigest())
输出结果:
加密前:Hello World
加密后:b94d27b9934d3e08a52e52d7da7dabfc
SHA1加密
SHA1算法是一种比MD5更安全的哈希算法,常用于数字签名和SSL证书。
import hashlib
str = 'Hello World'
sha1 = hashlib.sha1()
sha1.update(str.encode('utf-8'))
print("加密前:" + str)
print("加密后:" + sha1.hexdigest())
输出结果:
加密前:Hello World
加密后:0a4d55a8d778e5022fab701977c5d840bbc486d0
base64加密模块
base64编码是一种将二进制数据转化为文本数据的编码方式,常用于数据传输及存储。base64编码不是一种加密算法,而是一种编码方式,其编码后的内容是可逆的,并且不提供任何安全性保障。
import base64
str = 'Hello World'
# 编码
b64_enc = base64.b64encode(str.encode('utf-8'))
# 解码
b64_dec = base64.b64decode(b64_enc)
print("加密前:" + str)
print("加密后:" + b64_enc.decode('utf-8'))
print("解密后:" + b64_dec.decode('utf-8'))
输出结果:
加密前:Hello World
加密后:SGVsbG8gV29ybGQ=
解密后:Hello World
常用加密方法
加盐(Salt)
加盐是一种数据防篡改的方法,其通过在原始数据中添加一段随机字符串并进行哈希计算,来增强数据的安全性。
import hashlib
import os
def hash_passwd(password, salt = None):
if salt is None:
salt = os.urandom(16)
else:
salt = salt.encode('utf-8')
password = password.encode('utf-8')
hash_obj = hashlib.sha256()
hash_obj.update(password)
hash_obj.update(salt)
return hash_obj.hexdigest(), salt.hex()
password = '123456'
hash_passwd, salt = hash_passwd(password)
print("密码:" + password)
print("盐:" + salt)
print("加密后:" + hash_passwd)
输出结果:
密码:123456
盐:5e01d9f6b738071136eea8fc1e451305
加密后:dfdf598875c3f66ff8f14f0c7f1fd2b6a38cb762df7f8a0e7b14bdf058d87a3a
加密文件
将文件进行加密,可以通过读取文件数据,使用加密算法进行加密,然后将加密后的数据写入到新文件中,从而实现文件加密功能。
import hashlib
def hash_file(filename):
# 缓冲区大小
buffer_size = 2 ** 20
# 文件哈希对象
hash_obj = hashlib.sha256()
with open(filename, 'rb') as f:
while True:
data = f.read(buffer_size)
if not data:
break
hash_obj.update(data)
return hash_obj.hexdigest()
filename = 'example.txt'
print("加密前文件:" + filename)
print("加密后:" + hash_file(filename))
输出结果:
加密前文件:example.txt
加密后:772bb0192d1bd547d8efdacb05c8b2409347396b27d90510226eb27d2494270f
总结
Python的加密模块提供了多种加密算法,常用于数据加密、密码存储及消息认证等场景。在应用加密时需要注意算法的安全性,选择适合的加密算法。在加密时可以通过加盐等方式增强数据的安全性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python的加密模块之hashlib 与 base64详解及常用加密方法 - Python技术站