十六进制转二进制问题

时间:2021-06-14 20:47:19

标签: python python-3.x hex

我得到了 1 个键的预期输出,但不是另一个。假设我的数学公式是正确的 KEYCHARS/2 = 十六进制计数 * 8 = 二进制输出字符计数

所以换句话说,我的密钥长度为 52,我应该得到 208 个二进制字符

key1 = "37dcb292030faa90d07eec17e3b1c6d8daf94c35d4c9191a5e1e"
key2 = "a6c8b6733c9b22de7bc0253266a3867df55acde8635e19c73313"


binkey1 = bin(int(key1, 16))[2:].zfill(8)
binkey2 = bin(int(key2, 16))[2:].zfill(8)

print()
print(len(binkey1))   # output 206 chars
print(len(binkey2))   # output 208 chars
length = len(binkey1)
i = 0
currentbin1 = ""
currentbin2 = ""
xorbin = ""
while i < length :
    
    currentbin1 = binkey1[i]
    
    currentbin2 = binkey2[i]
    
    if currentbin1 == currentbin2 :
        xorbin = xorbin + "0"
    else :
        xorbin = xorbin + "1"

        
    i = i + 1

print("xored bin")
print(xorbin) # output is as desired as far as I can tell but missing bits due to the shorting above

1 个答案:

答案 0 :(得分:0)

您正在使用 zfill() 来填充您希望长度为 208 个字符的二进制字符串。但是根据您自己的数学计算,您调用的参数为 8 而不是 208。

只改变这个:

key1 = "37dcb292030faa90d07eec17e3b1c6d8daf94c35d4c9191a5e1e"
key2 = "a6c8b6733c9b22de7bc0253266a3867df55acde8635e19c73313"


binkey1 = bin(int(key1, 16))[2:].zfill(208)
binkey2 = bin(int(key2, 16))[2:].zfill(208)

print()
print(len(binkey1))   # output 206 chars
print(len(binkey2))   # output 208 chars
length = len(binkey1)
i = 0
currentbin1 = ""
currentbin2 = ""
xorbin = ""
while i < length :
    
    currentbin1 = binkey1[i]
    
    currentbin2 = binkey2[i]
    
    if currentbin1 == currentbin2 :
        xorbin = xorbin + "0"
    else :
        xorbin = xorbin + "1"

        
    i = i + 1

print("xored bin")
print(xorbin) # output is as desired as far as I can tell but missing bits due to the shorting above