我正在使用chr()
和ord()
这是我的代码:
key = 13
newString = ''
if mode == 'decrypt':
key = -key
for c in message:
newString += chr(ord(c) + key)
print newString
但有趣的事情发生了!
当我输入:"Hello world!"
时,我会回来"Uryy|-?|yq."
看起来是对的,对吧?
但是当我尝试破译时,
我得到:Hello 2old!
任何见解?我认为它与chr()
返回的内容有关:'\x84'
答案 0 :(得分:4)
"Hello world!"
有12个字符,但"Uryy|-?|yq."
为11(因此"Hello 2old!"
)。
原因是w
的新ASCII码是132而不是119.这是'\x84'
代码。
如果你在IDLE中执行它而不是print
只输入变量,它会输出带有\x84
的字符串,但如果你打印它,它会用无效字符替换它。如果输入确切的字符串(使用\x84
),则返回" Hello world!"。如果你不理解\x84
我建议你研究字符代码和十六进制。
传统的凯撒变换将所有字符保留为字母,而不是其他字符,如标点符号,竖线和132
。
A
的字符代码为65(十进制)
a
是97
根据http://en.wikipedia.org/wiki/Caesar_cipher,加密和解密是:
" E_n(x)=(x + n)\ mod {26}。"
和
" D_n(x)=(x - n)\ mod {26}。"
分别
使用65和97的字符偏移量并执行维基百科文章所说的内容。