Python-以十六进制计数

问题描述 投票:5回答:2

什么是递增十六进制数并将结果附加到较大的十六进制字符串末尾的好方法?我正在尝试格式化要在填充oracle攻击中使用的字符串。这些字符串将串联在一起以形成HTTP请求。

我有两个32个字符的十六进制字符串。 'g'是一个猜测,pad是填充oracle。基本上,我需要做的是将g的最后一个字节从0x00到0xff进行十六进制计数。到目前为止,我的代码是:

split = [value[x:x+32] for x in range (0, len(value), 32)]  #Split the CT into 16 byte chunks
IV = unhexlify(split[0])
c0 = unhexlify(split[1])
c1 = unhexlify(split[2])
c2 = unhexlify(split[3])


g = unhexlify("00000000000000000000000000000000")  
pad = unhexlify("00000000000000000000000000000001")  

pad_xor_guess = xorb(g, pad)
c1_prime = xorb(pad_xor_guess, c1)

attack = str(hexlify(c1_prime + c2).decode())

'attack'将被传递到将攻击字符串附加到网址的查询方法中。现在,我要坚持的部分是,我必须基本上发送多达256个HTTP请求才能猜测纯文本的一个字节。如何使用for循环从00到ff进行“计数”,然后将结果附加到g,以便可以将其与pad和选定的密文块进行异或?到目前为止,我一直在走这条路,但是我仍然坚持如何使用十六进制字符串来完成这项工作。

for i in range(0, 20):
    #g = bytes([i])
    print(bytes([i]),end=' ')
    #print(g, end=' ')
python count hex
2个回答
5
投票

对于给定的int值,十六进制函数将为您提供以0x开头的十六进制字符串,因此hex(i)[2:]会为您提供十六进制数字本身,zfill将确保您获得两位数的一位数字]]

for i in range(256):
    print(hex(i)[2:].zfill(2))

您可能还想考虑全部使用大写字母,因为某些解析器依赖十六进制以大写字母书写,因此示例如下:

for i in range(256):
    print(hex(i)[2:].zfill(2).upper())

并且,如果您只需要完整的字符串,则不需要一个接一个地附加它们,可以一次创建一个字符串:

hex_str = "".join([hex(i)[2:].zfill(2).upper() for i in range(256)])

4
投票

我想你的意思是:

© www.soinside.com 2019 - 2024. All rights reserved.