Python 3.x 使用CryptoJS将Python3代码等效为JS DES加密

Python 3.x 使用CryptoJS将Python3代码等效为JS DES加密,python-3.x,cryptojs,Python 3.x,Cryptojs,我有一个js DES加密代码,使用CryptoJS,如下所示: const CryptoJS=require('crypto-js'); 函数encryptByDES(消息、密钥){ var keyHex=CryptoJS.enc.Utf8.parse(key); var encrypted=CryptoJS.DES.encrypt(消息,keyHex{ 模式:CryptoJS.mode.ECB, 填充:CryptoJS.pad.Pkcs7 }); 返回加密的.toString(); } 如果

我有一个js DES加密代码,使用CryptoJS,如下所示:

const CryptoJS=require('crypto-js');
函数encryptByDES(消息、密钥){
var keyHex=CryptoJS.enc.Utf8.parse(key);
var encrypted=CryptoJS.DES.encrypt(消息,keyHex{
模式:CryptoJS.mode.ECB,
填充:CryptoJS.pad.Pkcs7
});
返回加密的.toString();
}
如果输入
message=“123456789”,key=“123456abcdefghijklmnopqrstuvxyz”
,则输出为
J6cwLeYoidP5U1V6MT67Ig==

我想知道Python3版本的代码。我没有运气(我不太了解这个包),最近的代码如下:

从Crypto.Util.Padding导入填充,取消填充
从Crypto.Cipher导入DES
从Crypto.Random导入获取\u Random\u字节
导入binascii
数据=b'123456789'
键=b'123456abcdefghijklmnopqrstuvwxyz'
iv=获取随机字节(16)
#下线触发错误
cipher1=DES.new(键,DES.MODE_CFB,iv)
ct=cipher1.加密(pad(数据,16))
打印(binascii.b2a_base64(ct))
错误是

ValueError:DES密钥长度不正确(32字节)

请帮帮我。

根据Topaco的建议,它终于开始工作了,代码如下:

data=b'123456789'
#下一个cdefghijklmnopqrstuvwxyz是不需要的
键=b'123456ab'
密码=DES.new(密钥,DES.MODE_ECB)
ct=加密(pad(数据,8))
打印(binascii.b2a_base64(ct))

仅供参考。

PyCryptodome需要一个8字节的DES密钥。CryptoJS隐式截断太长的密钥,而PyCryptoPdome必须显式执行此操作。此外,在CryptoJS代码中,使用ECB模式(而不是CFB模式),该模式不应用IV。填充时,必须使用DES的块大小,即8字节。请注意,DES和ECB都不安全。谢谢@Topaco。我已经解决了这个问题,它正在工作!它应该是
pad(data,8)
而不是
pad(data,16)
,这样它就被填充到DES块大小(8字节)的倍数。对于明文
b'123456789'
而言,这没有效果,但例如对于明文
b'1234567'
,可以通过与CryptoJS代码的结果进行比较轻松验证。