1

我正在尝试创建一个 Python Ciphersaber 2 实现,因为我在网上找到的那些似乎会产生乱码。在解密期间,我需要能够将字符串的单个字符与由整数值表示的密钥流进行异或,然后将该结果转换回字符串字符。请注意,我对 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)表示。如果您想对明文字符和密钥流进行异或运算,我确实建议您将其转换为 26 的范围。

例如ord('a') is 97 & ord('b') is 98 in ASCII

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 回答