2

私はPythonで単純なCaesar Cipherに取り組んでおり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 文字です (そして もそうです"Hello 2old!")。

これの原因は、 の新しい ASCII コードがw119 ではなく 132 であることです。これは'\x84'コードです。

IDLE で実行するとprint、変数を入力するだけでなく、文字列が出力されますが、出力する\x84と無効な文字に置き換えられます。正確な文字列 ( を使用\x84) を入力すると、"Hello world!" が返されます。理解できない場合は、\x84文字コードと 16 進数を調べることをお勧めします。


また、従来のシーザー シフトでは、すべての文字を文字として保持し、句読点、パイプ、132.

  • A文字コードは 65 (10 進数)

  • 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 の文字オフセットを使用して、ウィキペディアの記事に書かれていることを実行します。

于 2014-08-06T01:16:51.363 に答える