def enc(s):
s = codecs.encode(s, 'rot_13')
for k in 'A3 A7 AD B3 B5 BF C1 C5 C7 D3 DF E3 E5 E9 EF F1 FB'.split(' '):
k = int('0x' + k, 16)
s = (''.join(chr(ord(c) ^ k) for c in s))
return s
你怎么把这个密码颠倒过来,这样就可以解密了。我的加密消息是:wrTCoMK7wrjDocKhw6HCpMKiwrDosOiwrHCo8Kmw6LDocKswqfCpcK5wqbCo8KywqHCs8Khw6bCsMKlwq/Co8Kgw6LCo8Kyw 6PrmK0wLCosK3wrfCrcK8wrnCt8Kswq3DosKhwLCpMK3wrHCpMO7wrfCtMKjwrfCtAT==
我似乎得到了奇怪的字符,但我不知道为什么
XOR运算是对称的,所以编码和解码之间的区别只是ROT-13运算的执行顺序。对于编码,您在XOR之前进行,对于解码,您在之后进行。
import codecs
def xor_s(s, keystream):
for k in keystream:
s = "".join(chr(ord(c) ^ k) for c in s)
return s
def rot13(s):
return codecs.encode(s, "rot_13")
def enc(s, keystream):
return xor_s(rot13(s), keystream)
def dec(s, keystream):
return rot13(xor_s(s, keystream))
keystream = [
int(k, 16) for k in "A3 A7 AD B3 B5 BF C1 C5 C7 D3 DF E3 E5 E9 EF F1 FB".split(" ")
]
o = "Very Secret Message"
a = enc(o, keystream)
b = dec(a, keystream)
print(o, "->", a, "->", b)
打印
Very Secret Message -> §°¹õ§¥°§²õ§³³»¡§ -> Very Secret Message
下面是给定问题的另一个可能的解决方案:
import codecs
class BodyGuard():
def secret_sauce(self, s):
keystream = [
int(k, 16) for k in "A3 A7 AD B3 B5 BF C1 C5 C7 D3 DF E3 E5 E9 EF F1 FB".split(" ")
]
for k in keystream:
s = "".join(chr(ord(c) ^ k) for c in s)
return s
def encode(self, s):
return self.secret_sauce(codecs.encode(s, "rot_13"))
def decode(self, s):
return codecs.decode(self.secret_sauce(s), "rot_13")
if __name__ == '__main__':
b = BodyGuard()
msg_raw = "Hello world"
msg_encoded = b.encode(msg_raw)
msg_decoded = b.decode(msg_encoded)
print(f"{msg_raw} -> {msg_encoded} -> {msg_decoded}")