Python 如何正确地包装单字节XOR键?

Python 如何正确地包装单字节XOR键?,python,encryption,cryptography,xor,Python,Encryption,Cryptography,Xor,我正在尝试对12位长的消息与8位长的密钥进行异或运算 包装似乎有效的密钥的方法(放大并用于269位长的加密消息时)如下所示: message=“110111101010” key=“01100001” def调整键长度(信息,键): 乘数=长(信息)/长(键) 模=len(消息)%len(键) 调整后的_键=键[0:模]+键*乘法器 返回调整的U键 上述代码转换为: 乘数=1 模=4 调整后的_key=“0110”+“0110001” 如上所述,这种调整密钥长度的方法似乎适用于实际的加密消息

我正在尝试对12位长的消息与8位长的密钥进行异或运算

包装似乎有效的密钥的方法(放大并用于269位长的加密消息时)如下所示:

message=“110111101010”
key=“01100001”
def调整键长度(信息,键):
乘数=长(信息)/长(键)
模=len(消息)%len(键)
调整后的_键=键[0:模]+键*乘法器
返回调整的U键
上述代码转换为:

乘数=1
模=4
调整后的_key=“0110”+“0110001”
如上所述,这种调整密钥长度的方法似乎适用于实际的加密消息,生成解密的英文明文,但有一个例外:加密字的第一个ASCII字符似乎丢失了,因为该字读作“ooking”

我想这应该是“烹饪”


用单字节键对较长的消息进行异或运算的正确方法是什么?

您的调整键不正确

def adjust_key_length(message, key):
    multiplier = len(message) / len(key)
    modulo = len(message) % len(key)
    adjusted_key = multiplier* key + key[0:modulo] 
    return adjusted_key

message = "110111101010"

key = "01100001"

print( adjust_key_length(message, key))
我们期待着钥匙的重复,而不是某个部分

output   : 011000010110
如果我们讨论通过X-OR加密文本的正确方法,您肯定需要更长的密钥流。您可以生成用于加密的

评论更新:

  • 通常,密码挑战使用大写字符作为历史密码
  • 二进制转换需要在开头填写。”1b'转换为
    11011
    而不是
    0001011
    。你可以从这里看到
  • 上半部分

    hex_string = "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736"
    
    num_of_bits = len(hex_string) * 4
    
    binary_string = bin(int(hex_string, 16))[2:].zfill(num_of_bits)
    
    # list of english characters
    #chars = "abcdefghijklmnopqrstuvwxyz"
    chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    
    # list comprehension, creating binary forms of above characters,
    # making them 8 bits long by adding zeroes to the beginning
    binary_chars = [format(ord(char), 'b').zfill(8) for char in chars]
    
    def adjust_key_length(message, key):
        multiplier = int(len(message) / len(key))
        modulo = len(message) % len(key)
        adjusted_key = multiplier * key  + key[0:modulo]
        return adjusted_key
    

    我以前尝试过你的方法,但它没有产生任何可读的明文。这就是为什么我尝试将部分键添加到键本身的前面,它神奇地工作了,生成了一个可读的字符串。如果您想知道我面临的编程挑战是什么,您可以在可读的纯文本中查找它?您只给出了在重复键上下文时出错的
    adjust\u key\u length
    方法。我们如何才能确保您的其他方法是正确的?它是十六进制编码的。我宁愿先转换字节,然后转换x或字符……你完全正确,我可能不止一次地错了。我想出了一个解决办法。运行它并查看键“x”(从末尾算起的第三个)给出的输出。这是我得到的人类可读明文的唯一概念。我发现了你所有的错误。打印您计算的内容始终是一种良好的做法,这就是我发现您的错误的原因。