繁体   English   中英

卡在 python 代码中进行加密。 错误是“str”类型的 object 的未知格式代码“x”

[英]stuck in a python code for encryption. error is Unknown format code 'x' for object of type 'str'

我对编程和密码学很陌生,但我参加了一个 CTF 竞赛,那里为我们提供了一个十六进制,我们应该破解它。 通过一些工作和研究,我得到了这个代码

import binascii
my_ciphertext =    "0f05080e1220360106190c3610061c360207061e361e01081d4e1a2e0600070e362607210c1b0c4814"
binary_rep_of_ciphertext = binascii.unhexlify(my_ciphertext)# makes it binary
array_of_ciphertext = bytearray(binary_rep_of_ciphertext)#makes binary things to array elements

def xor_string_and_char(my_char_value):
    result= ''.join([chr(cc ^ my_char_value) for cc in array_of_ciphertext])
    return '{:x}'.format(result)     # convert back to hexadecimal

x = 0 
assert x==0
while x in range(255):
    my_plaintext = xor_string_and_char(x)
    print('b' + my_plaintext)
    x=x+1

但我不断收到错误,我不知道如何解决它。 我不确定代码有什么问题,因为我根本不擅长 python(ps:请使用新手语言解释)错误:未知格式代码 'x' for object of type 'str'

问题是没有为字符串提供十六进制格式,这些字符串用于表示代码中的单个字符/字节。 实际上,您应该使用整数来表示字节,并且 integer arrays 来表示多个字节,其中每个 integer 都在 0..255 范围内

Python 中的字符串幸运地用于文本,由字符而不是字节组成,它们不应该用于表示字节。 如果您的加密算法输入 / output 字节(如果您使用 XOR,通常会出现这种情况),那么除了报告/调试目的之外,不应使用字符串。

如果要将字符串显示为十六进制,则可以使用hexlify ,它与代码中使用的unhexlify相反。 但这似乎是一种老派的方法,因为 Python >= 3.5 似乎提供了其他方法来处理字节 arrays 和十六进制编码/解码......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM