Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试对单个字符键对字节字符串进行异或运算_Python_Cryptography_Xor - Fatal编程技术网

Python 尝试对单个字符键对字节字符串进行异或运算

Python 尝试对单个字符键对字节字符串进行异或运算,python,cryptography,xor,Python,Cryptography,Xor,我正在尝试使用XOR操作创建加密的十六进制字符串。我想对我的信息进行编码。我想对my_message中的每个字符与my_key进行异或运算。我将它们都转换为字节,然后将它们传递到我的xor\u encrypt方法来执行操作,并返回encrypt\u byte,它将作为十六进制编码字符串打印出来。异或操作出错:TypeError:不支持的操作数类型为^:'int'和'bytes'。我不知道如何更正这个问题,因为根据我目前的理解,字节([b^byte\u key])应该将它们都转换为正确的字节吗?我

我正在尝试使用XOR操作创建加密的十六进制字符串。我想对我的信息进行编码。我想对
my_message
中的每个字符与
my_key
进行异或运算。我将它们都转换为字节,然后将它们传递到我的
xor\u encrypt
方法来执行操作,并返回
encrypt\u byte
,它将作为十六进制编码字符串打印出来。异或操作出错:TypeError:不支持的操作数类型为^:'int'和'bytes'。我不知道如何更正这个问题,因为根据我目前的理解,
字节([b^byte\u key])
应该将它们都转换为正确的字节吗?我对密码学有点陌生,我正在尽力去理解。感谢您的帮助,请随时提问。我会在这里回答您的问题。提前谢谢你

#我的加密代码
#取出byte_msg并对byte_键进行异或
def xor_加密(字节信息,字节密钥):
加密字节=b''
对于字节_msg中的b:
加密字节+=字节([b^字节\U密钥])
返回加密字节
#Ascii编码
my_msg='执行订单66'
my_key='b'
#将ASCII消息和密钥转换为字节
byte_msg=字节(my_msg.encode(“utf-8”))
打印(字节\u msg)
key\u数组=字节(my\u key.encode(“utf-8”))
打印(按键阵列)
#将XOR'd消息打印为十六进制编码字符串
打印(f“XOR'd消息:{XOR\u encrypt(byte\u msg,key\u array.hex()}”)

您不能
xor
字符串,无论是二进制还是非二进制。因此,将字符串中的每个字符转换为其ASCII值,然后
^
。然后将结果转换为字符,最后对其进行编码

def xor_encrypt(byte_msg, byte_key):
    encrypt_byte = b''
    for b in byte_msg:
        encrypt_byte += chr(ord(b) ^ ord(byte_key)).encode()
    return encrypt_byte

# Ascii encoded
my_msg = 'Execute order 66'
my_key = 'b'
print(f"XOR'd message: {xor_encrypt(my_msg, my_key).hex()}") # XOR'd message: 271a0701171607420d10060710425454
否,您已将操作结果转换为字节。操作本身失败,因为您没有转换操作数。相反:

bytes(b) ^ bytes(byte_key)

您还莫名其妙地创建了一个结果列表,然后希望将该元素列表转换为
字节。我删除了它。

不能对
字节
字符串进行异或运算,但
字节
可以作为整数进行迭代。您可以对它们进行异或运算,将它们构建成一个
bytearray
,然后从那里转换为最终形式

# My encryption code
# Take in out byte_msg and XOR it against the byte_key
def xor_encrypt(byte_msg, byte_key):
    key = byte_key[0]
    return bytearray(val^key for val in byte_msg).hex()

# Ascii encoded
my_msg = 'Execute order 66'
my_key = 'b'
print(xor_encrypt(my_msg.encode("utf-8"), my_key.encode("ascii")))

哦,好吧,那就更有意义了!这对我会有很大帮助!非常感谢。我会的,等我试过之后!:)