尝试将字节字符串与单个字符键进行异或
Try to XOR a byte string aginst a single character key
我正在尝试使用 XOR 运算创建加密的十六进制字符串。我想编码 my_message。我想对 my_message
中的每个字符与 my_key
进行异或运算。我将它们都转换为字节,然后将它们传递到我的 xor_encrypt
方法中以执行操作,而 return encrypt_byte
将作为十六进制编码的字符串打印出来。我在 XOR 操作中遇到错误:TypeError:^ 不受支持的操作数类型:'int' 和 'bytes'。我不确定如何纠正这个问题,因为根据我目前的理解 bytes([b ^ byte_key])
应该将它们都转换为正确的字节吗?我对密码学有些陌生,我正在尽力理解。感谢任何帮助,请随时提出问题,我会在这里回答一段时间。提前致谢!
# My encryption code
# Take in out byte_msg and XOR it against the byte_key
def xor_encrypt(byte_msg, byte_key):
encrypt_byte = b''
for b in byte_msg:
encrypt_byte += bytes([b ^ byte_key])
return encrypt_byte
# Ascii encoded
my_msg = 'Execute order 66'
my_key = 'b'
# Convert ASCII message and key to Bytes
byte_msg = bytes(my_msg.encode("utf-8"))
print(byte_msg)
key_array = bytes(my_key.encode("utf-8"))
print(key_array)
# Print out the XOR'd message as a hex encoded string
print(f"XOR'd message: {xor_encrypt(byte_msg, key_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)
你还莫名其妙的做了一个结果列表,然后想把那个one-element列表转换成bytes
。我删除了那个。
您不能对 bytes
字符串进行 XOR,但 bytes
可以作为整数进行迭代。您可以对它们进行异或,将它们构建成 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")))
我正在尝试使用 XOR 运算创建加密的十六进制字符串。我想编码 my_message。我想对 my_message
中的每个字符与 my_key
进行异或运算。我将它们都转换为字节,然后将它们传递到我的 xor_encrypt
方法中以执行操作,而 return encrypt_byte
将作为十六进制编码的字符串打印出来。我在 XOR 操作中遇到错误:TypeError:^ 不受支持的操作数类型:'int' 和 'bytes'。我不确定如何纠正这个问题,因为根据我目前的理解 bytes([b ^ byte_key])
应该将它们都转换为正确的字节吗?我对密码学有些陌生,我正在尽力理解。感谢任何帮助,请随时提出问题,我会在这里回答一段时间。提前致谢!
# My encryption code
# Take in out byte_msg and XOR it against the byte_key
def xor_encrypt(byte_msg, byte_key):
encrypt_byte = b''
for b in byte_msg:
encrypt_byte += bytes([b ^ byte_key])
return encrypt_byte
# Ascii encoded
my_msg = 'Execute order 66'
my_key = 'b'
# Convert ASCII message and key to Bytes
byte_msg = bytes(my_msg.encode("utf-8"))
print(byte_msg)
key_array = bytes(my_key.encode("utf-8"))
print(key_array)
# Print out the XOR'd message as a hex encoded string
print(f"XOR'd message: {xor_encrypt(byte_msg, key_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)
你还莫名其妙的做了一个结果列表,然后想把那个one-element列表转换成bytes
。我删除了那个。
您不能对 bytes
字符串进行 XOR,但 bytes
可以作为整数进行迭代。您可以对它们进行异或,将它们构建成 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")))