python - 如何正确环绕单字节 XOR key ?

标签 python encryption cryptography xor

我正在尝试将 12 位长的消息与 8 位长的 key 进行异或。

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

message = "110111101010"

key = "01100001"

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

上面的代码翻译为:

multiplier = 1
modulo = 4
adjusted_key = "0110" + "01100001"

正如我上面所说,这种调整 key 长度的方法似乎适用于实际的加密消息,产生解密的英文明文,但有一个异常(exception):加密单词的第一个 ASCII 字符似乎丢失了,因为这个词读作“ooking”。

我猜它应该是“做饭”。

将较长消息与一字节 key 进行异或的正确方法是什么?

最佳答案

您的 adjustment_key 不正确。

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))

我们预计 key 的某些部分会重复

output   : 011000010110

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

评论更新:

  1. 一般来说,密码学挑战使用大写字符作为历史密码。
  2. 二进制转换需要在开头填写。 “1b”转换为 11011,而不是 00011011。从这个answer可以看出

上半部分。

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

关于python - 如何正确环绕单字节 XOR key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57021325/

相关文章:

python - python中与append()函数相反的是什么?

python - 计算连续天数 python 数据框

java - 在 java 中模拟 Cipher 时出错

php - 如何使用 php 创建 256 位加密的 zip 文件

c - 如何在 C 语言中使用 ISAAC

python - 在列表列表中查找与项目的部分匹配

python - 为什么 tensorflow RNN 历史 + 样本预测图看起来与训练数据集如此不同?

linux - 使用 OpenSSL 加密时的不同结果

C# - 将公钥 blob 导入 ECDiffieHellmanCng

cryptography - 消息中的内部散列摘要是否加强了外部摘要?