使用带有重复密钥的 XOR 密码进行加密
计算机体系结构为所有可打印字符预定义了 ASCII 值和二进制形式,这使我们能够像 XOR 和大多数加密/解密算法所依赖的那样操作按位逻辑。密钥对纯文本进行异或运算以生成加密文本。
仅使用此技术加密纯文本所需的参数:
- 纯文本(必须加密的文本)。
- 密钥(用于加密的唯一文本字节,可以是任意长度)。
加密处理:
- 查找“Plain text”和“Key”的长度。
- 将纯文本分解成与 Key 长度相等的长度。
- 用密钥分别按各自的顺序对纯文本片段进行异或运算。
- 将上述异或运算结果存储在一个数组中。
- 循环完成后,数组包含整个加密文本。
注意:有时您可能需要填充纯文本,以防它与一般块大小不完全一致。这是如何做到的 https://www.geeksforgeeks.org/retaining-the-padded-bytes-of-structural-padding-in-python/
以下是加密重复密钥 XOR的代码;
Python3
def repeated_key_xor(plain_text, key):
# returns plain text by repeatedly xoring it with key
pt = plain_text
len_key = len(key)
encoded = []
for i in range(0, len(pt)):
encoded.append(pt[i] ^ key[i % len_key])
return bytes(encoded)
# Driver Code
def main():
plain_text = b'Burning \'em, if you ain\'t quick and nimble\nI go crazy when I hear a cymbal'
key = b'ICE'
print("Plain text: ", plain_text)
print("Encrypted as: ", repeated_key_xor(plain_text, key).hex())
if __name__ == '__main__':
main()
输出:
Plain text: b”Burning ’em, if you ain’t quick and nimble\nI go crazy when I hear a cymbal”
Encrypted as: 0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f20430a652e2c652a3124333a653e2b2027630c692b20283165286326302e27282f