【发布时间】:2015-04-13 14:24:25
【问题描述】:
我得到了一个使用 rc4 密钥加密的文件。
我得到了那个密钥,想用 python 脚本解密它。
我该怎么做?
【问题讨论】:
-
相关:这里有一个用 Python 进行 RC4 加密的有用方法:github.com/bozhu/RC4-Python/blob/master/rc4.py
标签: python encryption rc4-cipher
我得到了一个使用 rc4 密钥加密的文件。
我得到了那个密钥,想用 python 脚本解密它。
我该怎么做?
【问题讨论】:
标签: python encryption rc4-cipher
在 Google 搜索 3 秒后发现以下内容: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)
【讨论】:
with open('/path/to/file.txt', 'r') as encrypted_file:
openssl enc -d -base64 -in <copy_paste_data_here> -out binary_data
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')
【讨论】: