Как расшифровать 3DES в режиме ECB (используя словарь)?

У меня есть некоторые зашифрованные тексты (зашифрованные с помощью 3DES в режиме ECB без соли).

Мой вопрос: как я могу расшифровать их, используя список слов? (или без такового?)

Пример:

Зашифрованный текст:

Xfi+h4Ir6l7zXCP+N4EPvQ==

Список слов для этого:

foo
bar
marketing

Первоначальный текст был до шифрования: "маркетинг" (просто, чтобы сделать пример полным).

Я попробовал с прокомментированным скриптом Python:

$ cat 3des.py 
 #!/usr/local/bin/python

from pyDes import *

data = "marketing"
k = des("DESCRYPT", CBC, "\0\0\0\0\0\0\0\0", pad=None, padmode=PAD_PKCS5)
d = k.encrypt(data)
print "Encrypted: %r" % d
print "Decrypted: %r" % k.decrypt(d)
assert k.decrypt(d, padmode=PAD_PKCS5) == data

тестирование это:

$ python 3des.py 
Encrypted: '\xabd\xfc\x98x\x86\x8d\xb5A\xba\x8e\x12,\x1f\x83\xb5'
Decrypted: 'marketing'
$ 

Небольшая помощь, пожалуйста?

1 ответ

Если вы собираетесь использовать pyDES, вам сначала нужно настроить скрипт на использование 3DES... Вот приведенный пример pyDES, модифицированный для использования 3DES:

from pyDes import *

data = "marketing"
k = triple_des("DESCRYPTDESCRYPT", ECB, "\0\0\0\0\0\0\0\0", pad=None, padmode=PAD_PKCS5)
d = k.encrypt(data)
print "Encrypted: %r" % d
print "Decrypted: %r" % k.decrypt(d)
assert k.decrypt(d, padmode=PAD_PKCS5) == data

Чтобы сломать это...

Следующая строка содержит информацию об инициализации класса:

k = triple_des("DESCRYPTDESCRYPT", ECB, "\0\0\0\0\0\0\0\0", pad=None, padmode=PAD_PKCS5)

Из документации, параметры следующие:

(key, [mode], [IV], [pad], [padmode])

key     -> Bytes containing the encryption key. 8 bytes for DES, 16 or 24 bytes
       for Triple DES
mode    -> Optional argument for encryption type, can be either
       pyDes.ECB (Electronic Code Book) or pyDes.CBC (Cypher Block Chaining)
IV      -> Optional Initial Value bytes, must be supplied if using CBC mode.
       Length must be 8 bytes.
pad     -> Optional argument, set the pad character (PAD_NORMAL) to use during
       all encrypt/decrpt operations done with this instance.
padmode -> Optional argument, set the padding mode (PAD_NORMAL or PAD_PKCS5)
       to use during all encrypt/decrpt operations done with this instance.

Итак, в моем модифицированном примере я настроил параметры следующим образом...

Key: DESCRYPTDESCRYPT
Mode: ECB
IV: "\0\0\0\0\0\0\0\0"
pad: None
padmode: PAD_PKCS5

Итак, отсюда вам нужно изменить указанную выше переменную "data" на зашифрованный текст, который вы хотите расшифровать, а затем загрузить список слов в массив, настроить цикл для итерации значений в массиве через параметр "key"...

Другие вопросы по тегам