【问题标题】:How can I xor a string character with an int in Python?如何在 Python 中将字符串字符与 int 进行异或?
【发布时间】:2015-12-03 05:09:30
【问题描述】:

我正在尝试创建一个 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。这些是字节值吗?

感谢任何帮助

【问题讨论】:

    标签: python encryption xor rc4-cipher


    【解决方案1】:

    字符串在计算机中由ASCII 值(准确地说是UTF-8)表示。如果您想对明文字符和密钥流进行异或运算,我确实建议您将其转换为 26 的范围。

    例如ord('a') is 97 & ord('b') is 98 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'
    

    同样,您可以将过程反转为解密

    P.S.我不知道 Ciphersaber 算法。

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      相关资源
      最近更新 更多