python中的XOR密码 - 奇数长度字符串

时间:2016-11-18 10:56:09

标签: python cryptography xor

我试图使用xor运算符创建密码。现在这就是我所拥有的:

from binascii import hexlify, unhexlify
from itertools import cycle

s = '636174'
key = '13'
def cipherkey(s, key):
    bin_key = bin(int(key))[2:]
    bin_s = bin(int(s, 16))[2:]
    k = []
    if len(bin_key) < len(bin_s):
        for i, j in zip(cycle(bin_key), bin_s):
            k.append('{}'.format(i))
    else:
        for i, j in zip(bin_key, cycle(bin_s)):
            k.append('{}'.format(i))
    return int("".join(k),2)

def xor_cipher(s,key):
    n = cipherkey(s, key)
    out = n ^ int(s,16)
    return hex(out)
print(unhexlify(xor_cipher(s, key)))

我确定这是效率极低的代码,但我希望保留尽可能多的代码。我现在已经开始了一段时间,但却没有发现错误。我在迭代zip(cycle(bin_key), bin_s)的过程中一定有错误。

2 个答案:

答案 0 :(得分:2)

我遇到了问题,因为我实施了密码。做到这一点的方法就是:

def xor_cipher(s, hexkey):
    key = ''
    for i,j in zip(s, cycle(hexkey)):
        key += j
    return hex(int(s,16)^int(key,16))[2:]

解决了那里的所有问题。

答案 1 :(得分:1)

尝试替换最后一行:

print(unhexlify(xor_cipher(s, key)))

使用此代码:

res=xor_cipher(s, key)[2:] # remove '0x' from the begining of the hex code
if res.__len__()%2 ==1:    # if res length is odd,
   res="0{}".format(res)   #     append '0' at the begining to make it even
print unhexlify(res)