在python中为二进制文件执行xor



我正在编写一个简单的哈希函数,该函数获取输入并创建一个32位的哈希文件。我陷入了xor部分。我不确定我应该如何为xor编写函数。请帮我做这个。这是我已经完成的代码:

import BitVector
import io
import math
import struct
if __name__ == "__main__":
    message = raw_input("your message:")
    f= open('file.dat','w')
    f.write(message)
    f.close()
    f = open('file.dat')
    while 1:
       r = f.readline(1)
       hx = r.encode("hex")
       data = bin(int(hx, 16))[2:]
       key = 11111111
       x = int(data) ^ int(key)
       print hex(x)
       if not r:break
    f.close()

运算符^对您来说已经足够了。

>>> 2 ^ 1
3
>>> 3 ^ 1
2

您应该关心的只是密钥的比特大小和"xor"数据的比特大小,以确保功能。

顺便说一下,xor运算应该只适用于整数。

import struct
key = 0xFEEEFEEE
with open('file', 'rb') as f:
    integer = f.read(4) # In fact, you could read all in.
    while len(integer) >= 4:
        # if integer is not a string longer than 4, next line crash.
        s, = struct.unpack('i', integer) # The return value is a tuple with integers.
        print key ^ s
        integer = f.read(4)

尝试将其用于xoring:

def xor_orig(data, key):
    return bool(data) ^ bool(key)

对于数据和密钥是二进制值并且使用^字符的二进制异或环,你可以使用:

def xor_orig(data, key):
    return int(data,2) ^ int(key,2)

In [1]: data = '1010'
In [2]: key = '0101'    
In [3]: int(data,2) ^ int(key,2)
Out[3]: 15
In [4]: data = '10'    
In [5]: key = '01'    
In [6]: int(data,2) ^ int(key,2)
Out[6]: 3
In [7]: data = '10'    
In [8]: key = '10'    
In [9]: int(data,2) ^ int(key,2)
Out[9]: 0

如果这有帮助,请告诉我。

最新更新