Как расшифровать файл, зашифрованный с помощью rc4, с помощью Python?

У меня есть файл, зашифрованный ключом rc4.

Я получил этот ключ и хочу расшифровать его с помощью скрипта Python.

Как я могу это сделать?


person Gal    schedule 13.04.2015    source источник
comment
Связано: вот полезный способ шифрования RC4 с помощью Python: github.com /bozhu/RC4-Python/blob/master/rc4.py   -  person Basj    schedule 02.10.2019


Ответы (2)


После 3-секундного поиска в Google было обнаружено следующее: http://www.emoticode.net/python/python-implementation-of-rc4-algorithm.html

Модифицировал его таким образом:

import base64

data = base64.b64decode("<encrypted file contents>")
key = "<rc4 key>"

S = range(256)
j = 0
out = []

#KSA Phase
for i in range(256):
    j = (j + S[i] + ord( key[i % len(key)] )) % 256
    S[i] , S[j] = S[j] , S[i]

#PRGA Phase
i = j = 0
for char in data:
    i = ( i + 1 ) % 256
    j = ( j + S[i] ) % 256
    S[i] , S[j] = S[j] , S[i]
    out.append(chr(ord(char) ^ S[(S[i] + S[j]) % 256]))

print ''.join(out)

Не уверен, что это сработает, поскольку вы не предоставили нам никаких данных для работы. В следующий раз, пожалуйста, опубликуйте пример данных, код, который вы уже пробовали, и какие ошибки вы получаете.


Изменить -- Работа с файлами

import base64

with open("/path/to/file.txt", "r") as encrypted_file:
    data = base64.b64decode(encrypted_file.read())
key = "<rc4 key>"

S = range(256)
j = 0
out = []

#KSA Phase
for i in range(256):
    j = (j + S[i] + ord( key[i % len(key)] )) % 256
    S[i] , S[j] = S[j] , S[i]

#PRGA Phase
i = j = 0
for char in data:
    i = ( i + 1 ) % 256
    j = ( j + S[i] ) % 256
    S[i] , S[j] = S[j] , S[i]
    out.append(chr(ord(char) ^ S[(S[i] + S[j]) % 256]))

decrypted_text = ''.join(out)
with open('decrypted.txt', 'w') as decrypted_file:
    decrypted_file.write(decrypted_text)
person nivix zixer    schedule 13.04.2015
comment
Да, я тоже нашел.. Но есть проблема с этим скриптом, чтобы прочитать файл и расшифровать его.. - person Gal; 13.04.2015
comment
Python может прочитать содержимое файла, если вы ему сообщите. with open('/path/to/file.txt', 'r') as encrypted_file: - person nivix zixer; 13.04.2015
comment
У меня возникла проблема с чтением файла. Тип файла - файл DAT, а не txt. Я получил следующую ошибку: Traceback (последний последний вызов): файл decrypt.py, строка 4, в ‹module› data = base64.b64decode(encrypted_file.read()) File C:\Python27\lib\base64.py, строка 76, в b64decode поднять TypeError (msg) TypeError: неправильное заполнение - person Gal; 14.04.2015
comment
Ах, похоже, у вас поврежден файл. Если у вас есть доступ к openssl (он должен быть установлен по умолчанию на вашей Linux-машине), попробуйте использовать его вместо Python. Он более интеллектуален с Base64. Вот пример команды декодирования: openssl enc -d -base64 -in <copy_paste_data_here> -out binary_data - person nivix zixer; 14.04.2015
comment
Самостоятельное шифрование — плохая идея. Ответ PyCryptodome - правильный путь. security.stackexchange.com/questions/ 18197/ - person Caleb1994; 20.05.2020

PyCryptodome делает это в настоящее время: https://pycryptodome.readthedocs.io/en/latest/src/cipher/arc4.html

from Crypto.Cipher import ARC4
key = b'Very long and confidential key'
cipher = ARC4.new(key)
msg = cipher.encrypt(b'Open the pod bay doors, HAL')
person BartBiczBoży    schedule 20.12.2019