在使用AES-128-cbc加密和解密过程中,IV(Initialization Vector,初始化向量)是必须要用到的参数,它用于与明文进行异或操作,增强加密的安全性。IV需要满足随机可预测的要求,也就是说IV需要随机生成,而且在加密过程中和解密过程中需要一致。
以下是使用Python的Crypto库来进行AES-128-cbc加密和解密过程的示例代码:
from Crypto.Cipher import AES
import os
def encrypt(key, iv, plaintext):
cipher = AES.new(key, AES.MODE_CBC, iv)
pad_len = AES.block_size - len(plaintext) % AES.block_size
padding = chr(pad_len) * pad_len
plaintext += padding
ciphertext = cipher.encrypt(plaintext)
return ciphertext
def decrypt(key, iv, ciphertext):
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = cipher.decrypt(ciphertext)
pad_len = ord(plaintext[-1])
plaintext = plaintext[:-pad_len]
return plaintext
key = os.urandom(16)
iv = os.urandom(16)
plaintext = b'This is a secret message!'
ciphertext = encrypt(key, iv, plaintext)
print('Ciphertext:', ciphertext.hex())
print('IV:', iv.hex())
decrypted_plaintext = decrypt(key, iv, ciphertext)
print('Decrypted plaintext:', decrypted_plaintext.decode())
在这个示例中,我们使用了os库中的urandom方法来生成随机的key和iv。在加密过程中,我们首先计算出需要添加的padding长度,然后将padding和明文拼接在一起,使用AES-CBC模式进行加密,最后返回密文和初始化向量。
解密过程是类似的,我们使用相同的key和iv,将密文解密后去除padding即可。