一、Python加密解密代码
import hashlib
from Crypto.Cipher import AES
from Crypto import Random
class AESCipher:
def __init__(self, key, iv=None):
self.bs = 16
self.key = hashlib.sha256(key.encode()).digest()[:self.bs]
self.iv = iv or Random.new().read(self.bs)
def encrypt(self, message):
message = self.__pad(message)
cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
return self.iv + cipher.encrypt(message)
def decrypt(self, ciphertext):
iv = ciphertext[:self.bs]
ciphertext = ciphertext[self.bs:]
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return self.__unpad(cipher.decrypt(ciphertext)).decode('utf-8')
def __pad(self, s):
return s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)
@staticmethod
def __unpad(s):
return s[:-ord(s[len(s)-1:])]
以上是Python AES加密解密的代码。该代码使用了Python的hashlib、Crypto库中的AES和Random模块。其中,__init__
方法初始化了一个AESCipher对象,并且将密钥使用sha256进行了摘要(Digest),随后使用AES ECB模式,对未加密的数据进行了加密;decrypt
方法则是对加密的密文进行解密,并返回明文。
二、Python密码加密解密
在使用Python进行加密解密时,密钥的使用十分重要,因为安全是最高优先级的。在AES加密解密中,我们需要使用密钥来加密解密,因此密钥的生成十分重要。以下是几种密钥生成方式:
- 使用hashlib加密密钥:
import hashlib
key = hashlib.sha256(b'my_secret_key').hexdigest()[:16]
- 使用Python内置的secrets库生成随机密钥:
import secrets
key = secrets.token_hex(16)
- 使用Python内置的os库生成随机密钥:
import os
key = os.urandom(16)
三、Python加密解密参数
在进行加密解密时,除了密钥外,还需要关注一些参数,以下是加密解密参数的介绍:
- 块大小(block size): 指定加密的数据块大小。在AES中,块大小为16字节。
- 填充(padding): 指定在加密的消息长度不足块大小时,需要进行的填充方式。在AES中,推荐使用PKCS#7填充。
- 加密模型(Cipher mode): 指定加密算法的工作模式,如ECB(电子密码本模式)或CBC(密码分组链接模式)等。
- 初始向量(IV): 指定加密和解密时所使用的初始向量值。在AES中,IV的长度通常为16字节。
四、Python加密解密算法
Python中常用的加密算法有DES、Triple-DES、AES、RC4等,其中最为常用的是AES。以下是Python AES加密解密过程中需要使用的算法:
- AES: 高级加密标准(Advanced Encryption Standard),也被称为Rijndael加密法。
- hashlib: Python内置的hashlib库,用于生成消息摘要。
- Crypto.Cipher: Python的Crypto库中的Cipher模块,用于进行加密操作。
五、Python加密与解密
在Python中,常见的加密与解密算法包括AES、DES、Triple-DES、RSA等。其中AES是最常用的,因为它在安全性、速度、灵活性等方面都很优秀。以下是Python中使用AES进行加密与解密的示例:
- 使用AES进行加密:
from Crypto.Cipher import AES
from Crypto import Random
def encrypt(key, plaintext):
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CBC, iv)
return iv + cipher.encrypt(plaintext)
- 使用AES进行解密:
from Crypto.Cipher import AES
def decrypt(key, ciphertext):
iv = ciphertext[:AES.block_size]
cipher = AES.new(key, AES.MODE_CBC, iv)
return cipher.decrypt(ciphertext[AES.block_size:])
六、Python加密的库
在Python中,常用的加密库除了Python自带的hashlib库外,还包括以下几个库:
- Crypto: 包括了除了hashlib外的所有加密算法,如AES、DES、Triple-DES、RSA等。
- pycrypto: 是一个Python加密工具集,包括了AES、DES等多种加密算法。
- cryptography: 高级加密标准库,支持AES、DES、ECC等多种加密算法。
七、Python加解密
在Python中,加密和解密都需要经过以下几个步骤:
- 选择合适的加密算法。
- 生成密钥。
- 加密数据。
- 解密数据。 以下是一个使用Python AES进行加解密的示例:
from aes import AESCipher
# 将密钥和明文准备好
key = 'my_secret_key'
plaintext = 'hello, world!'
# 创建AESCipher对象
aes = AESCipher(key)
# 使用AES进行加密
ciphertext = aes.encrypt(plaintext)
# 使用AES进行解密
result = aes.decrypt(ciphertext)
print(result)
以上示例中,我们使用了自己编写的AESCipher类进行加密解密,该类初始化时需要指定密钥,使用encrypt
方法进行加密,使用decrypt
方法进行解密。