2

我正在使用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'

4

1 回答 1

4

"Hello world!"是 12 个字符,但是"Uryy|-?|yq."是 11 个(也是 11 个"Hello 2old!")。

造成这种情况的原因是新的 ASCII 码w是 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 的字符偏移量并按照 Wikipedia 文章中的说明进行操作。

于 2014-08-06T01:16:51.363 回答