1

ネットで見つけたものは意味不明なものを生成するように見えるため、Python Ciphersaber 2 実装を作成しようとしています。解読中に、整数値で表されるキーストリームを使用して文字列の 1 文字を xor し、その結果を文字列文字にキャストできる必要があります。私は Python にまったく慣れていないので、ひどい失敗は無視してください。

私がこれまでに試したこと:

plaintext[i] = ord(msg[i] ^ keystream[i] plaintext[i] = str(plaintext[i])その結果、整数値になりました

plaintext[i] = ord(msg[i] ^ keystream[i] plaintext[i] = chr(plaintext[i])その結果、値 y, \xed \xf4 \x07 が得られます。これらはバイト値ですか?

どんな助けにも感謝します

4

1 に答える 1

0

コンピュータでは、文字列はASCII値 (正確には UTF-8) で表されます。プレーンテキスト文字とキーストリームを xor したい場合は、26 の範囲に変換することをお勧めします。

例: ord('a') は 97 & ord('b') はASCIIで 98

ord('a') ^ ord('b') = 97 ^ 98 = 3
Note: 3 in ASCII is not an alphabet
a-z lies in range 97 - 122
A-Z lies in range 65 - 100

最初にそれらを 26 の範囲に変換してみてください (小文字の場合は ord('a')、大文字の場合は ord('A') をモジュロとして使用します)。暗号の生成- ステップ 1 :

ord('a') % 97 = 0
ord('b') % 97 = 1
0 ^ 1 = 1

ここで、前の結果1を ord('a')に追加し、それを文字に変換します。暗号の生成- ステップ 2 :

chr( ord('a') + 1 ) = chr( 97 + 1 ) = chr( 98 ) = 'b'

同様に、プロセスを逆にして解読することもできます。

PS私はCiphersaberアルゴリズムを認識していません。

于 2015-12-03T05:50:00.560 に答える