私はプレーンテキスト情報を正しく暗号化し、暗号化されたデータを16進数として出力するプログラムを持っています。私は上でこのデータを解読することができます。私のプログラムから受け取った16進数のデータと私が使用したキーは(プレーンテキストで)Pythonの16進数でのRC4解読
私が達成しようとしている次のステップは、暗号化されたメッセージを16進数で、暗号化キーを16進数で表示します。私はpassword
などの主要および首尾上記のウェブサイト上で復号化し8c905b7c294a94c30422d81d552e
として暗号文を入力した場合
私は...動作するように私のプログラムの解読一部を取得
を悩みを抱えている...それはdoesnの仕事。
誰かがどのように私は16進数の入力をRC4で動作する復号化を得ることができる任意のアイデアを持っていますか?ここで
# Global variables
state = [None] * 256
p = q = None
def setKey(key):
##RC4 Key Scheduling Algorithm (KSA)
global p, q, state
state = [n for n in range(256)]
p = q = j = 0
for i in range(256):
if len(key) > 0:
j = (j + state[i] + key[i % len(key)]) % 256
else:
j = (j + state[i]) % 256
state[i], state[j] = state[j], state[i]
def byteGenerator():
##RC4 Pseudo-Random Generation Algorithm (PRGA)
global p, q, state
p = (p + 1) % 256
q = (q + state[p]) % 256
state[p], state[q] = state[q], state[p]
return state[(state[p] + state[q]) % 256]
def encrypt(key,inputString):
##Encrypt input string returning a byte list
setKey(string_to_list(key))
return [ord(p)^byteGenerator() for p in inputString]
def decrypt(inputByteList):
##Decrypt input byte list returning a string
return "".join([chr(c^byteGenerator()) for c in inputByteList])
def intToList(inputNumber):
##Convert a number into a byte list
inputString = "{:02x}".format(inputNumber)
return [int(inputString[i:i + 2], 16) for i in range(0, len(inputString), 2)]
def string_to_list(inputString):
##Convert a string into a byte list
return [ord(c) for c in inputString]
key = raw_input("Enter Key: ")
ciphertext = raw_input("enter ciphertext: ")
print decrypt(intToList(ciphertext))