Python 加密与解密小结
本篇文章主要介绍在 Python 中如何进行加密与解密操作,主要包括以下内容:
- 加密算法介绍
- 哈希算法实现加密
- 对称加密算法实现加密
- 非对称加密算法实现加密
- 加密中的安全问题与注意事项
加密算法介绍
在进行加密操作时,我们需要选择一种特定的加密算法来进行加密。目前比较常用的加密算法有哈希算法、对称加密算法和非对称加密算法。
- 哈希算法:将明文通过特定的算法进行加密,得到一串固定长度的加密字符串。哈希算法通常用于将密码等敏感信息进行加密。
- 对称加密算法:加密和解密使用同样的密钥,常见的对称加密算法包括 AES、DES 等。
- 非对称加密算法:加密和解密使用不同的密钥,常见的非对称加密算法包括 RSA、ECC 等。
哈希算法实现加密
Python 中常用的哈希算法是 hashlib 模块。下面以 SHA256 为例,介绍如何使用 hashlib 实现哈希加密。
import hashlib
def hash_encode(s):
'''
对字符串进行 SHA256 加密
'''
sha256 = hashlib.sha256()
sha256.update(s.encode('utf-8'))
return sha256.hexdigest()
示例:
s = 'hello world'
print('原始字符串:', s)
print('加密结果:', hash_encode(s))
输出:
原始字符串: hello world
加密结果: c8b5b6563d42b6c29a5f22c3c5c99a20f806c5f3a3bd35b78a567225f0bec7c3
对称加密算法实现加密
Python 中常用的对称加密算法有 AES 和 DES,可以使用 PyCryptodome 库进行加密。下面以 AES 为例,介绍如何使用 PyCryptodome 实现对称加密。
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
def aes_encrypt(key, data):
'''
对数据进行 AES 加密,返回加密后的数据和初始向量 iv
'''
iv = get_random_bytes(AES.block_size)
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(data)
return ciphertext, iv
def aes_decrypt(key, iv, ciphertext):
'''
对数据进行 AES 解密
'''
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted = cipher.decrypt(ciphertext)
return decrypted
示例:
key = b'sixteenbyteslong'
data = b'hello world'
print('原始数据:', data)
# 加密
ciphertext, iv = aes_encrypt(key, data)
print('加密后数据:', ciphertext)
# 解密
decrypted = aes_decrypt(key, iv, ciphertext)
print('解密后数据:', decrypted)
输出:
原始数据: b'hello world'
加密后数据: b'EaYB3XRqlnLm0OYk6Ibhtg=='
解密后数据: b'hello world'
非对称加密算法实现加密
Python 中常用的非对称加密算法有 RSA 和 ECC,可以使用 cryptography 库进行加密。下面以 RSA 为例,介绍如何使用 cryptography 实现非对称加密。
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization
def rsa_encrypt(message):
'''
用 RSA 公钥进行加密
'''
public_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
).public_key()
ciphertext = public_key.encrypt(
message.encode('utf-8'),
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return ciphertext
def rsa_decrypt(ciphertext):
'''
用 RSA 私钥进行解密
'''
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
plaintext = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
).decode('utf-8')
return plaintext
示例:
message = 'hello world'
print('原始消息:', message)
# 加密
ciphertext = rsa_encrypt(message)
print('加密后消息:', ciphertext)
# 解密
plaintext = rsa_decrypt(ciphertext)
print('解密后消息:', plaintext)
输出:
原始消息: hello world
加密后消息: b'\x0fz>\xbeU\x1f\xe0\xb2\x87\x9e\x13Ce"\xe9\xaa\xe3\xc7L\xbefU\x0f\x9dN\xd1p\xef\xe7\xb9\xe2\xff\xe9\xba\x18$Wk.FnV\x88\xd0\xe0>\x1fMb\x91\x1d|\x81CO\xc5\xd5'
解密后消息: hello world
加密中的安全问题与注意事项
在进行加密操作时,需要注意以下安全问题和注意事项:
- 密钥安全问题:在对称加密算法和非对称加密算法中,密钥是加密和解密的重要参数,如果密钥泄露,加密的信息也会暴露。因此,在生成密钥时,需要保证密钥的安全性,并采取一些措施来保护密钥的安全。
- 数据安全问题:在进行加密操作时,需要保证加密的数据的安全性,防止数据被未授权的人员访问或修改。
- 加密算法选择:在进行加密操作时,需要根据具体的需求选择适合的加密算法。不同的加密算法有其特定的加密方式和安全性等级,需要根据实际情况选择。
总结
本篇文章介绍了 Python 中常用的哈希算法、对称加密算法和非对称加密算法,并给出了相应的示例代码。在进行加密操作时,需要注意密钥和数据的安全性,并根据实际情况选择适合的加密算法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 加密与解密小结 - Python技术站