凯撒转移密码

时间:2014-08-06 00:49:26

标签: python encryption caesar-cipher

我正在使用chr()ord()

在python中使用简单的Caesar Cipher

这是我的代码:

 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'

1 个答案:

答案 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的字符偏移量并执行维基百科文章所说的内容。

相关问题