题目描述
sha256加密后输出的十六进制的字符串,要让它与一个数组的内容(数组元素有32个,每个长度为一个字节)进行异或。我的问题是如何将十六进制的字符串转换为对应的二进制并于数组进行异或。
题目来源及自己的思路
问题主要是:十六进制字符中的每一个字符是用一个字节(8bit)表示的,而每一个字符表示的原始的二进制位只有(4bit),而且每两个这样的数据要和数组中的类似0x0D这样的数据异或,这应该如何实现?
1 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
python中要进行位运算,关键是2个算子的类型和长度都必须相同。
B类型的数组每个元素是1字节长的int,那么你把你的【十六进制字符串】也转换成【1字节长的int组成的序列】就行了。最快捷的方法,就是直接转换成字节串。
>>> import array
>>> my_arr = array.array('B', range(32)) #一个B类型的数组
>>> my_arr
array('B', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
>>> hex_str = '68656c6c6f20776f726c6421' #你手上的十六进制字符串
>>> hex_bytes = bytes.fromhex(hex_str) #将字符串转换成字节串
>>> hex_bytes #字节串的本质就是【单字节整数】组成的数组
b'hello world!'
>>> hex_bytes[0] ^ my_arr[0] #元素间可以正常进行位运算了
104
添加回答
举报
0/150
提交
取消