python 密码学 异或 字符串与十六进制

新手上路,请多包涵

题目描述

sha256加密后输出的十六进制的字符串,要让它与一个数组的内容(数组元素有32个,每个长度为一个字节)进行异或。我的问题是如何将十六进制的字符串转换为对应的二进制并于数组进行异或。

题目来源及自己的思路

问题主要是:十六进制字符中的每一个字符是用一个字节(8bit)表示的,而每一个字符表示的原始的二进制位只有(4bit),而且每两个这样的数据要和数组中的类似0x0D这样的数据异或,这应该如何实现?

阅读 3.3k
1 个回答

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
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题