PHP与Python中的DES ECB解密

PHP与Python中的DES ECB解密,python,php,des,Python,Php,Des,我有一个PHP中的现有代码,可以解密DES-ECB模式的加密字符串。我知道DES已经被弃用了,我应该改变一些事情,但现在就是这样 示例代码如下所示: $enc_string='9bb6eab4c48319d09921c7400abdc811d54981744e9a2f40';//十六进制格式的加密字符串 $key='F6d^*g';//一个6字节的解密密钥 $decrypted_string=openssl_decrypt( pack(“H*”,$enc_string),//使用十六进制装箱

我有一个PHP中的现有代码,可以解密DES-ECB模式的加密字符串。我知道DES已经被弃用了,我应该改变一些事情,但现在就是这样

示例代码如下所示:


$enc_string='9bb6eab4c48319d09921c7400abdc811d54981744e9a2f40';//十六进制格式的加密字符串
$key='F6d^*g';//一个6字节的解密密钥
$decrypted_string=openssl_decrypt(
pack(“H*”,$enc_string),//使用十六进制装箱
‘DES-ECB’,$key,
OPENSSL_原始_数据| OPENSSL_零_填充,'
);
请注意,我使用的是一个6字节长的解密密钥

我现在必须将代码转换为python。我得出了以下结论:

>>来自加密密码导入DES
>>>导入binascii
>>>附件字符串='9bb6eab4c48319d09921c7400abdc811d54981744e9a2f40'
>>>键='F6d^*g'
>>>a=DES.new(键,DES.MODE_ECB)#这给了我一个错误
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python3.7/site packages/Crypto/Cipher/DES.py”,第99行,新格式
返回DESCipher(键,*args,**kwargs)
文件“/usr/local/lib/python3.7/site packages/Crypto/Cipher/DES.py”,第63行,在__
blockalgo.blockalgo.\uuuu初始化(self,\u DES,key,*args,**kwargs)
文件“/usr/local/lib/python3.7/site packages/Crypto/Cipher/blockalgo.py”,第141行,在__
self.\u cipher=factory.new(密钥,*args,**kwargs)
ValueError:密钥长度必须为8字节,而不是6字节
>>>decrypted=a.decrypt(binascii.unhexlify(enc_string))#这不能使用6字节长的密钥
问题:

  • 为什么6字节长的键可以与PHP一起使用,而不能与python一起使用
  • python中还有其他模块可以实现这一点吗

  • PHP实现为键添加零填充。手动向键添加填充后,以下代码可以正常工作:

    来自加密密码导入DES
    导入binascii
    附件字符串='9bb6eab4c48319d09921c7400abdc811d54981744e9a2f40'
    键='F6d^*g'。编码('utf-8')
    key=key+b'\0'*(8-len(key)%8)##添加填充
    a=DES.new(键,DES.MODE_ECB)#这给了我一个错误
    decrypted=a.decrypt(binascii.unhexlify(enc_字符串))
    打印(已解密的.hex())
    
    可能
    OPENSSL\u ZERO\u PADDING
    选项意味着密码被填充。您可以在python中这样尝试:
    “F6d^*g\0\0”
    。如果这不起作用,请尝试在字符串前面加上零。谢谢,这已经解决了它