-2

私は16進文字列を持っています:

12104c06134e5709140f104f02521b0a0442020c4d070b184f4815541f0800484e1e0241061d064d540b0a020210194510164d4f3a005343004e430e1e1d0a524612171b0117001b0e45431c0c1d160a520d11744e19061a114d0e55174f084e543714050b174353541b48070e000e4d

興味がある場合は、単に読み取り可能なテキストにデコードしたいだけです (ただし、これは暗号の問題であるため、デコードされたテキストはナンセンスに見えますが、16 進数のナンセンスではありません)。これを行うために、上記のメッセージを変数 msg に保存しました。次に、この操作を実行しました。

msg.decode('hex')

ただし、値を印刷すると、いくつかの文字、一連の奇妙な四角形、複数行に断片化されたテキストが表示されます。どうしたの?

4

1 に答える 1

4

ASCIIデータがその 16 進文字列に格納されていると思われるようです。その場合、16 進文字列の 2 文字ごとに 1 バイトの ASCII テキストが表されます。その場合は、これを実行してデコードできます。

>>> a = "12104c06134e5709140f104f02521b0a0442020c4d070b184f4815541f0800484e1e0241061d064d540b0a020210194510164d4f3a005343004e430e1e1d0a524612171b0117001b0e45431c0c1d160a520d11744e19061a114d0e55174f084e543714050b174353541b48070e000e4d"
>>> bytes = [a[i:i+2] for i in range(0,len(a),2)]
>>> s_decoded = [chr(int(c,16)) for c in bytes]
>>> ''.join(s_decoded)
'\x12\x10L\x06\x13NW\t\x14\x0f\x10O\x02R\x1b\n\x04B\x02\x0cM\x07\x0b\x18OH\x15T\x1f\x08\x00HN\x1e\x02A\x06\x1d\x06MT\x0b\n\x02\x02\x10\x19E\x10\x16MO:\x00SC\x00NC\x0e\x1e\x1d\nRF\x12\x17\x1b\x01\x17\x00\x1b\x0eEC\x1c\x0c\x1d\x16\nR\r\x11tN\x19\x06\x1a\x11M\x0eU\x17O\x08NT7\x14\x05\x0b\x17CST\x1bH\x07\x0e\x00\x0eM'

しかし、ご覧のとおり、これらの文字のほとんどは「印刷できない」文字です (つまり、それらの ASCII 値は、'A' や 'd' のような人間が読める文字をコード化していません)。以下は、印刷可能な ASCII 文字を含む 16 進文字列をデコードする例です。

>>> a2 = "43616c6562"
>>> bytes2 = [a2[i:i+2] for i in range(0,len(a2),2)]
>>> bytes2
['43', '61', '6c', '65', '62']
>>> ''.join([chr(int(c,16)) for c in bytes2])
'Caleb'
>>> 
于 2012-11-13T16:59:40.143 に答える