繁体   English   中英

如何计算Python中两个字节的异或?

[英]How to calculate the XOR of two bytes in Python?

我用这个 function 在两个字节之间应用 XOR 操作

 def byte_xor(ba1, ba2):
        """ XOR two byte strings """
        return bytes([_a ^ _b for _a, _b in zip(ba1, ba2)])

我使用了两个字节 R 和 L 的 function

new_R = byte_xor(str(R).encode(), str(self.hash1(str(L).encode())).encode())
  1. 其中str(R).encode()等于b'X: 0x92405a2937fba74a036c002e51dc8405850afe40123b23f2\nY: 0x2b8471aac0e9b2038dd369d376481585bbf0286927d7607e\n(On curve <P192>)'
  2. str(self.hash1(str(L).encode())).encode()等于b'4775954696306753387525785228259522227266813277010037244898'
  3. 并且new_R等于b'l\r\x17\x05A\x0c\x06\x02\t\x03R\x02\x0f\x04\x02UQY\x00\x01S\x05\x04\x0eV\x02\x02\nW\x00\x08QQ\n\x06\x02\x02\n\x03\x06YWV\x06\x07\x06\x02\x02R\x02\x00Q\x00>m\x02\x19\x08'

我不明白的是,当我想获得 R 的值时,它并没有给我全部的价值,不知何故,它似乎给了我实际价值的一半:

R = byte_xor(new_R, str(self.hash1(str(L).encode())).encode())
print('This is R:',R)
This is R: b'X: 0x92405a2937fba74a036c002e51dc8405850afe40123b23f2\nY: 0'

难道我做错了什么? 请帮我

您可能希望循环第二个参数的字节以覆盖第一个参数的所有内容。 zip()只会匹配常见的长度:

from itertools import cycle

def byte_xor(ba1, ba2):
        """ XOR two byte strings """
        return bytes([_a ^ _b for _a, _b in zip(ba1, cycle(ba2))])

R = b'X: 0x92405a2937fba74a036c002e51dc8405850afe40123b23f2\nY: 0x2b8471aac0e9b2038dd369d376481585bbf0286927d7607e\n(On curve <P192>)'
H = b'4775954696306753387525785228259522227266813277010037244898'

N = byte_xor(R,H)
print(N)
b'l\r\x17\x05A\x0c\x06\x02\t\x03R\x02\x0f\x04\x02UQY\x00\x01S\x05\x04\x0eV\x02\x02\nW\x00\x08QQ\n\x06\x02\x02\n\x03\x06YWV\x06\x07\x06\x02\x02R\x02\x00Q\x00>m\x02\x19\x08L\x05U\r\r\x02\x05WXU\x03U\x0fU\x07\x03\x00\x00SQ\x01\x03\x0e\\\x06\x05\x04\x0c\n\x04\x0c\r\x07PPT\x07\x00\x0e\x00\x01\x03\x04V\x00\x01\x00\x06U:\x1bx\\\x14WMKNQ\x17\x0be\x08\x0c\x06\x08\x10'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM