我想使用 AES 加密来加密我的数据,我之前已经这样做过,但在我的笔记本电脑中,该方法不起作用,并给我同样的错误,有什么方法可以修复它? 这是代码:
from Crypto.Cipher import AES
def paddedKey(key):
while len(key)%8!=0:
key +=' '
return key
def paddingText(text):
while len(text)%16!=0:
text +=' '
return text
data = paddingText(input('Enter text to encrypt - '))
key = paddedKey(input('Enter key between 16-32 charachters - '))
if(len(key)<=16 & len(key)>=32):
print('Key must me between 16 and 32 charachters')
cipher = AES.new(key)
ciphertext = cipher.encrypt(data)
# print(ciphertext)
# print(ciphertext.decode('cp855'))
print('Encrypted text = ',ciphertext)
但是这段代码给了我错误: 回溯(最近一次调用最后一次): 文件“C:\Users\shati\Desktop\Python\Research\AES_Extended.py”,第 18 行,位于 密码 = AES.new(密钥) 类型错误:new() 缺少 1 个必需的位置参数:'mode'
我正在使用 pythone 版本:Python 3.6.8
点子版本:pip 20.1.1
PycryptoDome 版本:pycryptodom 3.9.8
pycrypto 和 pycryptodome 使用相同的模块名称 (
Crypto
) 发生冲突,但 pip 允许您同时安装它们。
我已经安装了
pycrypto
,它not需要参数mode
,但是我安装的其他一些库需要pycrptodome
,并且它在我不知情的情况下安装了,然后我遇到了问题中描述的相同错误.
旧的 pycrypto 库 有一个默认模式 MODE_ECB。但该库不再维护。
该库的较新 pycryptodome 分支几乎完全兼容,但这是一种边缘情况,它不是 100% 兼容。
您需要更改创建新 AES 对象而不指定模式的旧代码:
Crypto.Cipher.AES.new(key).decrypt(encrypted)
现在明确指定以前的默认模式:
Crypto.Cipher.AES.new(kek, Crypto.Cipher.AES.MODE_ECB).decrypt(encrypted)