Как закодировать строку с 56-символьным ключом с тройным алгоритмом? - PullRequest
0 голосов
/ 24 мая 2019

Дайте мне 56-символьный ключ в формате base 64.Я должен закодировать эту строку «Terminalid; Order_id; Цена» с TripleDes (ECB, PKCS7) в python3.

Я вхожу в соответствующие модули и дешифровать ключ.Но проблема в длине ключа.

import base64
from Crypto.Cipher import DES3
def encrypt_DES3(terminal_id,order_id,amount):
"""

:param terminal_id: String-for example: EUDuTQrp
:param order_id: integer- for example: 123456
:param amount: integer - for example: 60000
:return: encrypt "terminal_id;oreder_id;integer"
"""
key =base64.b64decode("YTAzZTYyNDNiMTljMzg0YzYxY2NhMGU4NjU1ODc2N2FkYTAwMGJiOQ==")
text = terminal_id + ';' + str(order_id) + ';' + str(amount)
def pad(text):
    while len(text) % 8 != 0:
        text += '='
    return text

plain_text = pad(text)
cipher = DES3.new(key, DES3.MODE_ECB)
my_export = cipher.encrypt(plain_text)
return my_export

У меня проблема с длиной ключа.Спасибо за совет.

Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
encrypt_DES3('EUDuTQrp',123456,60000)
File "<pyshell#17>", line 17, in encrypt_DES3
cipher = DES3.new(key, DES3.MODE_ECB)
File "/usr/lib/python3/dist-packages/Crypto/Cipher/DES3.py", line 
113, in new
return DES3Cipher(key, *args, **kwargs)
File "/usr/lib/python3/dist-packages/Crypto/Cipher/DES3.py", line 
76, in __init__
blockalgo.BlockAlgo.__init__(self, _DES3, key, *args, **kwargs)
File "/usr/lib/python3/dist-packages/Crypto/Cipher/blockalgo.py", 
line 141, in __init__
self._cipher = factory.new(key, *args, **kwargs)
ValueError: Invalid key size (must be either 16 or 24 bytes long)

1 Ответ

0 голосов
/ 24 мая 2019

Вместо этого вы должны использовать AES.Этот модуль предоставляется только для устаревших целей.

https://pycryptodome.readthedocs.io/en/latest/src/cipher/des3.html

...