在 Python 中将字符串转换为十六进制



这是我从数组构建消息的函数。 有两种类型的检查:

  • 检查 "C", "G", "A" -> [("{'chip_id': '00012345', 'check_type': 'C'}", 1494273855.0)]

  • 检查 "P" -> ["{'纬度': 43.5529109, '经度': 1.4910036, '检查类型': 'P'}", 1494273855.0]

def build(self, checks):
#checks is an array.
# #1- On transforme notre check en tuple
_tuple = checks[0]
#2- On recupere le couple id/type en string. On recupere le timestamp en string
_type = _tuple[0]
_timestamp = _tuple[1]
#Selection taille message d apres le type element
e = _type.find("type': '")
type = _type[e+8]
if type == "C" or type == "A" or type == "G":
start = _type.find("'chip_id': '")
stop = _type.find("', '")
chip_id = _type[start + 12:stop]
a = int(binascii.hexlify(chip_id))
msg_build = bytes(type) + hex(int(_timestamp)) + hex(struct.unpack('<I', struct.pack('<f', a))[0]) + bytes(b"P")
if type == "P":
start_lat = _type.find("'latitude': ")
end_lat =  _type.find(", 'long")
latitude = float(_type[start_lat+12:end_lat])
start_long = _type.find("'longitude': ")
end_long = _type.find(", 'chec")
longitude = float(_type[start_long+13:end_long])
msg_build = bytes(type) + hex(int(_timestamp)) + hex(struct.unpack('<I', struct.pack('<f', latitude))[0]) +  hex(struct.unpack('<I', struct.pack('<f', longitude))[0])
return msg_build

使用此函数,我可以将任何检查转换为所需的消息。它似乎工作得很好。

"C"check_type返回消息,如"C0x5910e6b80x592c40b7P"。

"P"check_type返回消息,例如"P0x5910ca4b0x420f12d00x428fca07">

但是,以另一种方式,我需要解密这些消息并获取所有信息。我可以为我的"P"消息做到这一点。

对于check_type"C",当我需要解密时,我遇到了一些问题。

让我们举个例子,我将构建以下检查:

[("{'chip_id': '00014876', 'check_type': 'C'}", 1494279864.0)]

其中"chip_id"始终是 8 位数字,"check_type"将是"C"、"G"或"A"(这里并不重要)和时间戳。

我的函数返回:

C0x5910e6b80x592c40b7P

  • C 是我的类型。
  • 0x5910e6b8是我的时间戳。如果我执行"int("0x5910e6b8",0)",我会在检查中找到"1494279864"时间戳
  • 0x592c40b7是我chip_id。

这就是我的问题。 我可以通过以下方式加密我的chip_id:

  • a = int(binascii.hexlify(chip_id))
  • hex(struct.unpack('<I', struct.pack('<f', a))[0])

但是,我找不到如何从加密邮件中的十六进制(" 0x592c40b7")获取chip_id("00012345")。

有人知道我该怎么做吗?

这符合要求吗:

msg = ''.join(["{:02X}".format(e) for e in bytearray("Hello, world!")])
''.join([chr(int(msg[i:i+2], 16)) for i in range(0, len(msg), 2)])

相关内容

  • 没有找到相关文章