Python中的Perl包('H*',$value)

2024-05-13 18:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的Perl代码,需要用Python重写:

    $varTmp = join( '', pack( "H*", $value ) );
    $result = $varTmp ^ $key;
    $result =~ s/\x00//g;

我想到的是:

result =  (value.decode('hex') ^ key).replace('\x00', '')

现在,我以错误告终:

TypeError: unsupported operand type(s) for ^: 'str' and 'str'

有人能帮我把它做好吗


Tags: key代码value错误resultreplacepackperl
1条回答
网友
1楼 · 发布于 2024-05-13 18:30:08

如果我正确理解了这个问题,$value是一个十六进制数字字符串,比如“303132”,它被转换成由十六进制数字对表示的字符串(“303132”->;“012”),然后与另一个字符串,$key异或

对于Python 2,您需要一种稍微不同的方法:

value = "303132"; 
key = "\0\0\0";
print "".join( chr(t) for t in ( ord(i) ^ ord(j) for i,j in zip(value.decode("hex"), key) ) if t != 0)

对于Python 3,其中str.decode不存在,必须使用bytes.fromhex

value = "303132"; 
key = b"\0\0\0"; # b stands for bytes
print("".join( chr(t) for t in ( i ^ j for i,j in zip(bytes.fromhex(value), key) ) if t != 0))

请注意,在第一个片段中keyvalue.decode('hex')的结果是字符串,因此i和j是字符,需要使用ord转换为数字;在第二种情况下,没有这种需要-keybytes.fromhex(value)属于bytes类型,因此i和j已经是整数了

相关问题 更多 >