以下のコードでは、同じキー (2 タイム パッド) で暗号化された 2 つのメッセージを指定して、暗号化されたメッセージを復号化しようとしています。コードは、16進文字列をASCIIとして出力しようとする最後の行まで、私が望むように機能します。
エラーが発生します:
print result.decode('hex')
File "/usr/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode
output = binascii.a2b_hex(input)
TypeError: Non-hexadecimal digit found
エラーの原因となっている 16 進文字列は次のとおりです。
ab51e67kba7<4:72fd`d
その中に非16進文字が含まれています。非六角が含まれている理由がわかりません。または、ここからどこへ行くか。
完全なコードは次のとおりです。
# Messages
m1 = "31aa4573aa487946aa15"
m2 = "32510ba9babebbbefd00"
# Key
k = "6b6bdfa4rqggrgwereff"
guess = 'aa'
#guess = guess.encode('hex')
result = ''
def strxor(a, b): # xor two strings of different lengths
if len(a) > len(b):
return "".join([chr(ord(x) ^ ord(y)) for (x, y) in zip(a[:len(b)], b)])
else:
return "".join([chr(ord(x) ^ ord(y)) for (x, y) in zip(a, b[:len(a)])])
# Make cipher texts
c1 = strxor(m1,k)
c2 = strxor(m2,k)
# xor of the two messages
m1m2 = strxor(c1,c2)
# loop through each bit of the m1m2 message and xor against a test char or string
# see if any of the output makes sense
for e in range(0, len(m1), 2):
subString = m1m2[e:e+2]
try:
result = result + "".join( strxor(subString, guess))
except exception:
pass
#print hex and ascii results
print result
print result.decode('hex')