Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Python-des-ede-cbc等价物_Php_Python_3des - Fatal编程技术网

Php Python-des-ede-cbc等价物

Php Python-des-ede-cbc等价物,php,python,3des,Php,Python,3des,我目前有一个PHP中的3DES加密和解密(des ede cbc),如下所示: php > $key = '0000000000000000'; php > $iv = '00000000'; php > $plaintext = '1234567812345678'; php > $ciphertext = openssl_encrypt($plaintext, 'des-ede-cbc', $key, 0, $iv); php > echo $ciphertex

我目前有一个PHP中的3DES加密和解密(des ede cbc),如下所示:

php > $key = '0000000000000000';
php > $iv = '00000000';
php > $plaintext = '1234567812345678';
php > $ciphertext = openssl_encrypt($plaintext, 'des-ede-cbc', $key, 0, $iv);
php > echo $ciphertext;
LEvEJf9CI+5VTVNeIjARNamKH+PNTx2P

php > $plaintext = openssl_decrypt($ciphertext, 'des-ede-cbc', $key, 0, $iv);
php > echo $plaintext;
1234567812345678
我需要能够获取密文并用python对其进行解密。我找到的最接近的是pycrypto:

我的尝试:

>>> key = '0000000000000000'
>>> iv = '00000000'
>>> cipher_decrypt = DES3.new(key, DES3.MODE_CBC, iv)
>>> plaintext = cipher_decrypt.decrypt('LEvEJf9CI+5VTVNeIjARNamKH+PNTx2P')
>>> plaintext
b']v\xdf\xa7\xf7\xc0()\x08\xdf\xcb`4\xa7\x10\x9e\xaf\x8c\xb6\x00+_\xb3?2\x1d\\\x08\x01\xfa\xf2\x99'
我不确定它有什么不同。是CBC模式下的3DES。我不确定ede部分的确切含义,但我似乎找不到任何东西来模拟这种完全相同的openssl模式

版本信息:
Python 3.6.5

PHP 7.1.3

从PHP获得的字符串是base64编码的

from Crypto.Cipher import DES3
from base64 import decodebytes

key = b'0000000000000000'
iv = b'00000000'

cipher_decrypt = DES3.new(key, DES3.MODE_CBC, iv)
plaintext = cipher_decrypt.decrypt(decodebytes(b'LEvEJf9CI+5VTVNeIjARNamKH+PNTx2P'))

print(plaintext.decode("utf-8"))

>>>1234567812345678

IIRC,“EDE”仅代表“加密-解密-加密”;这只是意味着你使用的是加密-解密-加密3DES,而不是将DES三倍化的其他更为罕见(也不太有用)的方法。(我很确定这里没有任何细节是相关的,您几乎肯定在这两种情况下都使用TDEA 3密钥EDE,但即使我是对的,也可能值得一读。)密文是用base64编码的,
plaintext=cipher\u decrypt.decrypt(base64.decodebytes(b'LEvEJf9CI+5vtneijarnamkh+PNTx2P'))
返回
b'12345678812345678\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08'
。这回答了你的问题吗?救生圈。谢谢