我正在尝试编写一个python脚本,将十六进制字符串转换为ASCII,并将结果保存为.der cert格式的文件。我可以使用转换插件在Notepad ++中执行此操作,但我想通过调用notepad ++ NppConverter插件或使用python模块找到一种从命令行在python脚本中执行此转换的方法。
我在那里,但是我的转换与notepad ++中的ASCII输出不同,下面是Notepad ++中输出的片段
但我的python转换在
下面显示略有不同的输出正如您所看到的,我的脚本会导致输出中缺少字符,如果我说实话,我不知道为什么某些块会以黑色标出。但是这些丢失的块需要与第一张图片的格式相同。
这是我的基本代码,我在Python 3中工作,我正在使用backslashreplace错误控件,因为这是我可以将有问题的十六进制显示在输出文件中的唯一方法
result = bytearray.fromhex('380c2fd6172cd06d1f30').decode('ascii', 'backslashreplace')
text_file = open("C:\Output.der", "w")
text_file.write(result)
text_file.close()
非常感谢任何指导。
答案 0 :(得分:2)
MikG,我会说python正是你所要求的。
你告诉你将字节转换为字符串,并用转义序列替换最高有效位的字节(\ xFF字符除外)。
Characters \ x04(ETB)和\ x1F(US)是完全合法的ASCII字符(虽然不可打印),并且使用它们的文字值进行编码。
字符\ xd6和\ xd0在ASCII中是非法的 - 它们是8位长。它们使用4个字母的长转义序列进行编码,如您所知:" \" (反斜杠char)和" xd6" /" xd0"字符串
我对DER并不擅长,但假设您希望拥有原始的8位序列。以下是如何实现这一目标的:
result = bytearray.fromhex('380c2fd6172cd06d1f30')
with open("Output.der", "wb") as text_file:
text_file.write(result)
请注意" wb"说明符open
- 它告诉python做二进制IO。
我还使用了with语句来确保text_file
在写入时无关紧要。