1

我正在尝试学习使用 XOR、hex、ord 和 char。我遇到了麻烦,当我的 XOR 生成一个只有一位数字的十六进制时,我通过检查是否添加零以使其成为两位数十六进制来解决它,否则当我“加入”列表时,我缺少元素并且不能将其用于进一步的异或。我做错了什么,或者这就是它的工作方式?

s0='Hello World'
s1='supersecret'

def strxor (s0, s1):
    cypher_text=[]
    for i in range(0,len(s0)):
        l=hex(ord(s0[i])^ord(s1[i]))
        if len(l)==3:
            l=l[0:2]+'0'+l[2:]
        cypher_text.append(l[2:])
    return ''.join(cypher_text)

密码文本=3b101c091d53320c000910

没有更正 cypher_text=3b101c91d5332c0910

4

1 回答 1

0

你没有做错什么。这就是它的工作方式。
下面的 C 版本证实了你的结果。

#include <string.h>
void testss() {
  const char *s0 = "Hello World";
  const char *s1 = "supersecret";
  for (unsigned i = 0; i<strlen(s0); i++) {
    printf("%02X", ((unsigned char) s0[i]) ^ ((unsigned char) s1[i]));
    }
  printf("\n"); 
  // 3B101C091D53320C000910  testss() output
  // 3b101c091d53320c000910  OP cypher_text
  // 3b101c 91d5332 c 0 910  OP uncorrected cypher_text (my spaces inserted)
  }
于 2013-06-20T02:14:40.247 回答