如何将一些字符串值作为十六进制值进行异或

时间:2017-02-09 02:48:59

标签: python

我有一组值作为字符串和一组潜在的键。给出所有可能的一个字符串,我试图制作256个潜在的ascii字符串。

my_text = '253224233b32242479'
print(my_text)
for key in string.printable: #all one character ascii charecter
    key = key.encode("hex")
    key = int(key, 16)
    key = key + 0x200
    key = hex(key)
    total_string = ""
    for x in range(0, len(my_text)/2): #scroll through all pairs of hex numbers
        original_letter = my_text[x*2:x*2+2]
        original_letter = int(original_letter, 16)
        original_letter = original_letter + 0x200
        original_letter_as_hex = hex(original_letter)
        xor_letter = original_letter_as_hex ^ key
        total_string = total_string.append(str(xor_letter))
    print(total_string)
print(total_string.decode("hex"))

我的问题是xor_letter = original_letter_as_hex ^ key给出:TypeError: unsupported operand type(s) for ^: 'str' and 'str'

那么,我怎样才能转换为例如' 25'对于可以被作为十六进制的XOR&#的东西?

这个问题是我在这里提出的一个更深入的问题:How to convert a hex number that is a string type to a hex type

简而言之:

>>> key = '0'
>>> key = key.encode('hex')
>>> key = int(key, 16)
>>> key = key + 0x200
>>> key = hex(key)
>>> letter = '0e'
>>> letter = int(letter, 16)
>>> letter = letter + 0x200
>>> letter = hex(letter)
>>> done = key^letter
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for ^: 'str' and 'str'

我该怎么做? done应该是&#39; 3e&#39;应转换为&#39;&gt;&#39;在ascii。

由一个ascii输入'0e'进行异或的一个十六进制输入'0'是一个ascii输出'>'

我想要一个可以将2个输入作为tpye字符串的函数,将其中一个作为十六进制处理,将一个作为ascii处理,并将它们像这个站点一样对其进行异或处理:http://xor.pw/

1 个答案:

答案 0 :(得分:1)

你好像很困惑。没有&#34;十六进制类型&#34;,有int个。您还没有回答关于您所使用的版本的关键问题。无论如何,在Python 3中:

>>> keys = bytes(string.printable, 'ascii')
>>> keys
b'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
>>> keys[0]
48
>>> key = keys[0]
>>> letter = '0e'
>>> letter = int(letter, 16)
>>> key += 0x200
>>> letter += 0x200
>>> done = key^letter
>>> done
62

现在,我们可以把它放到另一个字节对象中:

>>> bytes([done])
b'>'

请注意b前缀。或者,我们可以获得Python 3 str

>>> bytes([done]).decode('ascii')
'>'

或者只使用chr

>>> chr(done)
'>'