Python加密解密技巧大全
python 加密与解密
具体介绍python的加密与解密算法
例如:RSA算法
文章目录
前言
加密算法分散列算法、对称加密、非对称加密。
由于计算机软件的非法复制,通信的泄密、数据安全受到威胁。一般为了安全,会要求将数据库名称、密码等信息进行加密。所以加密在开发过程中是经常使用到的技术,在一些重要场景中都有所应用,如:登录、支付、oauth等,场景不同需要搭配不一样的签名加密算法来达到业务目标。项目中用到了python端,需要用到python对密码的加密解密模块。加密算法分散列算法、对称加密、非对称加密。
提示:以下是本篇文章正文内容,下面案例可供参考
一、对称加密
1、用途和特点:
- 对称加密使用相同的密钥来加密和解密数据。
- 加密和解密速度快,适合于大量数据的加密传输。
- 常见的对称加密算法包括 DES、AES 等。
- 对称加密的主要问题在于密钥管理的安全性,因为发送方和接收方都必须共享同一个密钥。
2、AES加密实现
AES有5种加密模式,分别是ECB, CBC, CTR, CFB, OFB。下面以AES的CBC模式为例。
2.1 加密
def aes_cbc_encrypt(key, iv, plaintext):
'''
cbc加密
:param key:
:param iv:
:param plaintext: 二进制数据
:return: 二进制数据
'''
# 使用 PKCS7 填充
padder = padding.PKCS7(algorithms.AES.block_size).padder()
padded_plaintext = padder.update(plaintext) + padder.finalize()
# 创建一个 AES 加密器
backend = default_backend()
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)
encryptor = cipher.encryptor()
# 加密明文
ciphertext = encryptor.update(padded_plaintext) + encryptor.finalize()
return ciphertext
2.2 解密
def aes_cbc_decrypt(key, iv, ciphertext):
'''
cbc解密
:param key:
:param iv:
:param ciphertext: 二进制数据
:return: 二进制数据
'''
# 创建一个 AES 解密器
backend = default_backend()
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)
decryptor = cipher.decryptor()
# 解密
decrypted_data = decryptor.update(ciphertext) + decryptor.finalize()
# 去除填充
unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
unpadded_data = unpadder.update(decrypted_data) + unpadder.finalize()
return unpadded_data
2.3 测试
def test():
# 生成随机的 16 字节密钥和 IV
key = os.urandom(16)
iv = os.urandom(16)
# 明文
plaintext = "Hello, AES encryption with CBC mode!"
# 加密
ciphertext = aes_cbc_encrypt(key, iv, plaintext.encode())
print("Cipher Text:", ciphertext.hex())
# 解密
decrypted_data = aes_cbc_decrypt(key, iv, ciphertext)
print("Decrypted Text:", decrypted_data.decode())
二、非对称加密
1、用途和特点:
- 非对称加密使用一对密钥,公钥用于加密数据,私钥用于解密数据。
- 公钥是公开的,任何人都可以使用它来加密数据,而私钥是保密的,只有持有者才能解密数据。
- 非对称加密用于安全地交换密钥或数字签名,以确保数据的机密性和完整性。
- 常见的非对称加密算法包括 RSA、DSA、ECC 等。
2、RSA加密实现
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它使用一对密钥来加密和解密数据。RSA算法包括密钥生成、加密、解密三个步骤。SA算法在数据传输过程中广泛用于安全地加密敏感信息,例如在Web浏览器和服务器之间进行安全通信,数字签名,以及安全地交换对称加密密钥等方面。它是公认的安全可靠的加密算法之一。
2.1 密钥生成
def generate_rsa_key_pair():
private_key = rsa.generate_private_key(
public_exponent=65537, # 用于生成 RSA 公钥的指数值
key_size=2048, # 用于生成的 RSA 密钥对的位数
backend=default_backend()
)
public_key = private_key.public_key()
return private_key, public_key
2.2 加密
def encrypt_data(data, public_key):
encrypted_data = public_key.encrypt(
data, padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return encrypted_data
2.3 解密
def decrypt_data(encrypted_data, private_key):
decrypted_data = private_key.decrypt(
encrypted_data,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
return decrypted_data
2.4 输入输出到文件
# 保存密钥对到文件
def save_key_pair(private_key, public_key):
with open('private_key.pem', 'wb') as f:
f.write(private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
))
with open('public_key.pem', 'wb') as f:
f.write(public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
))
# 从文件中加载密钥对
def load_key_pair():
with open('private_key.pem', 'rb') as f:
private_key = serialization.load_pem_private_key(
f.read(),
password=None,
backend=default_backend()
)
with open('public_key.pem', 'rb') as f:
public_key = serialization.load_pem_public_key(
f.read(),
backend=default_backend()
)
return private_key, public_key
2.5 测试
private_key, public_key = generate_rsa_key_pair() # 生成公私钥
save_key_pair(private_key, public_key) # 将公私钥保存到文件中
data = "Hello, RSA!"
encrypted_data = encrypt_data(data.encode(), public_key)
print("Encrypted data:", encrypted_data)
decrypted_data = decrypt_data(encrypted_data, private_key)
print("Decrypted data:", decrypted_data.decode())
三、摘要算法(哈希算法)
1、用途和特点:
- 摘要算法也称为哈希算法,它将任意长度的消息转换为固定长度的哈希值。
- 哈希值是唯一的,即使输入的消息只有微小的改动,输出的哈希值也会有很大的变化。
- 常见的摘要算法包括 MD5、SHA-1、SHA-256 等。
- 摘要算法通常用于验证数据的完整性,密码存储(使用哈希值而不是原始密码),以及生成唯一的标识符等。
2、实现
Python的hashlib提供了常见的摘要算法,如MD5、SHA1、SHA224、SHA256、SHA384、SHA512等算法。摘要算法又称哈希算法、散列算法。
2.1 MD5加密
import hashlib
hash = hashlib.md5()
hash.update("hello".encode())
print(hash.hexdigest())
2.2 SHA1加密
import hashlib
hash = hashlib.sha1()
hash.update("hello".encode())
print(hash.hexdigest())
2.3 SHA224加密
import hashlib
hash = hashlib.sha224()
hash.update("hello".encode())
print(hash.hexdigest())
2.4 SHA256加密
import hashlib
hash = hashlib.sha256()
hash.update("hello".encode())
print(hash.hexdigest())
2.5 归纳
在 MD5、SHA1、SHA224、SHA256、SHA384 和 SHA512 中,SHA256、SHA384 和 SHA512 等基于 SHA-2 算法族的算法通常被认为具有更强的加密性。这是因为它们提供了更大的输出长度和更强大的抗碰撞能力,使得对抗密码分析攻击更加困难。
具体来说:
- SHA256 输出长度为 256 位,提供了较高的抗碰撞能力,通常被广泛应用于加密应用中。
- SHA384 输出长度为 384 位,提供了更高的安全性,但也会带来一定的性能损耗。
- SHA512 输出长度为 512 位,提供了更强的安全性,但相对于 SHA256 和 SHA384,它的计算成本更高。
作者:mysouil