每日脚本学习5.10 - XOR脚本
xor运算的简介
异或就是对于二进制的数据可以 进行同0异1
简单的演示 :
结果是 这个就是异或
异或的作用 1、比较两数是否相等 2、可以进行加密
加密就是需要key
明文 :0b010110
key : 0b1010001
这个时候就能进行加密
明文 ^ key=密文
还有这个加密比较方便 就是解密也是这个逻辑
考虑一个问题: 如果这个key是比密文小的该怎么办 就是明文和key 不等的时候 我们就需要使用密码本模式(循坏使用密钥)
知道这个之后可以进行脚本的书写:
def xor_cipher(data: bytes, key: bytes) -> bytes: #xor 操作的对象就是二进制的字节流"""使用 XOR 算法对数据进行加密或解密(XOR 加密解密是同一个操作)参数:data (bytes): 要加密或解密的数据key (bytes): 加密或解密使用的密钥返回:bytes: 加密或解密后的结果"""# key_bytes = key.encode('utf-8') 密钥进行utf8 转换 为了解决一些解密之后出现中文的情况result = bytearray() # 这个的结果是字节流key_length = len(key) # 获取长度 for i in range(len(data)):result.append(data[i] ^ key[i % key_length]) #密码本模式 解决data的数据比key大的情况 循坏使用密钥 return bytes(result) #返回的数据是 字节# 示例用法
if __name__ == "__main__":# 示例数据和密钥(实际使用时请替换为真实数据)plaintext = b"Hello, World!" # 要加密的明文 使用 b '' 转为字节key = b"SecretKey" # 密钥# 加密encrypted = xor_cipher(plaintext, key)print(f"加密后: {encrypted.hex()}")# 解密(使用相同的密钥和算法)decrypted = xor_cipher(encrypted, key)print(f"解密后: {decrypted.decode('utf-8')}")