Python 使用CBC模式使用PyCrypto进行AES 256加密-有任何弱点吗?
我有以下使用AES 256加密/解密数据的python脚本,您能告诉我代码中是否有任何东西可能使加密变弱,或者对于使用CBC模式的AES 256加密,是否有任何东西我没有考虑到?我已经测试了这个脚本,它工作得很好,它正在加密和解密数据,但我只是想听听别人的意见。谢谢Python 使用CBC模式使用PyCrypto进行AES 256加密-有任何弱点吗?,python,encryption,encryption-symmetric,pycrypto,Python,Encryption,Encryption Symmetric,Pycrypto,我有以下使用AES 256加密/解密数据的python脚本,您能告诉我代码中是否有任何东西可能使加密变弱,或者对于使用CBC模式的AES 256加密,是否有任何东西我没有考虑到?我已经测试了这个脚本,它工作得很好,它正在加密和解密数据,但我只是想听听别人的意见。谢谢 from Crypto.Cipher import AES from Crypto import Random BLOCK_SIZE = 32 INTERRUPT = u'\u0001'
from Crypto.Cipher import AES
from Crypto import Random
BLOCK_SIZE = 32
INTERRUPT = u'\u0001'
PAD = u'\u0000'
def AddPadding(data, interrupt, pad, block_size):
new_data = ''.join([data, interrupt])
new_data_len = len(new_data)
remaining_len = block_size - new_data_len
to_pad_len = remaining_len % block_size
pad_string = pad * to_pad_len
return ''.join([new_data, pad_string])
def StripPadding(data, interrupt, pad):
return data.rstrip(pad).rstrip(interrupt)
SECRET_KEY = Random.new().read(32)
IV = Random.new().read(16)
cipher_for_encryption = AES.new(SECRET_KEY, AES.MODE_CBC, IV)
cipher_for_decryption = AES.new(SECRET_KEY, AES.MODE_CBC, IV)
def EncryptWithAES(encrypt_cipher, plaintext_data):
plaintext_padded = AddPadding(plaintext_data, INTERRUPT, PAD, BLOCK_SIZE)
encrypted = encrypt_cipher.encrypt(plaintext_padded)
return encrypted
def DecryptWithAES(decrypt_cipher, encrypted_data):
decoded_encrypted_data = encrypted_data
decrypted_data = decrypt_cipher.decrypt(decoded_encrypted_data)
return StripPadding(decrypted_data, INTERRUPT, PAD)
our_data_to_encrypt = u'abc11100000'
encrypted_data = EncryptWithAES(cipher_for_encryption, our_data_to_encrypt)
print ('Encrypted string:', encrypted_data)
decrypted_data = DecryptWithAES(cipher_for_decryption, encrypted_data)
print ('Decrypted string:', decrypted_data)
我已经在网上看到了代码。原则上,它没有太多问题,但没有必要发明自己的填充物。此外,我不明白为什么第一个填充字符被称为中断。我假设中断和PAD是作为单个字节处理的(我不是Python专家) 最常见的填充是PKCS#5填充。它由N个字节和填充字节数的值组成。这里使用的填充看起来更像“ISO”填充,它由一个设置为1的位组成,以区别于数据和其他填充位,其余为零。这将是代码中的代码点\u0080 因此,加密(可以提供数据的机密性)似乎得到了正确的使用。如果您还需要完整性保护和/或身份验证(例如通过使用MAC或HMAC),则这取决于用例。当然,没有任何法律保证或任何规定