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

题目描述

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

题目来源及自己的思路

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

浮云间
浏览 779回答 1
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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python