Как расшифровать 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"...