出现异常:TypeError:new() 缺少 1 个必需的位置参数:'mode'

问题描述 投票:0回答:3

我想使用 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

python encryption aes pycryptodome
3个回答
1
投票

pycryptopycryptodome 使用相同的模块名称 (

Crypto
) 发生冲突,但 pip 允许您同时安装它们。

我已经安装了

pycrypto
,它not需要参数
mode
,但是我安装的其他一些库需要
pycrptodome
,并且它在我不知情的情况下安装了,然后我遇到了问题中描述的相同错误.


0
投票

从错误中可以明显看出,

new
方法需要两个参数。

检查此使用 PyCrypto AES 256 加密和解密

您必须将 mode 参数传递给

AES.new
函数。


0
投票

旧的 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)
© www.soinside.com 2019 - 2024. All rights reserved.