我正在尝试创建一个Python Ciphersaber 2实现,因为我在网上找到的那些似乎产生了胡言乱语。在解密期间,我需要能够使用由整数值表示的密钥流来对字符串的单个字符进行xor,然后将该结果转换回字符串字符。请注意我是Python的新手,所以无视我糟糕的失败。
到目前为止我尝试过的事情:
<html>
<head>
<link href="https://cdnjs.cloudflare.com/ajax/libs/plottable.js/1.15.0/plottable.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.1/basic/jquery.qtip.css" rel="stylesheet" />
</head>
<body>
My Plot
<!-- Show histograms -->
<div id="sample-pies"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/plottable.js/1.15.0/plottable.js"></script>
</body>
</html>
导致整数值
和
plaintext[i] = ord(msg[i] ^ keystream[i]
plaintext[i] = str(plaintext[i])
会产生值y,\ xed \ xf4 \ x07。这些是字节值吗?
感谢任何帮助
答案 0 :(得分:0)
字符串由计算机中的ASCII值(准确地说是UTF-8)表示。如果你想对明文字符和密钥流进行xor,我建议你把它转换成26的范围。
E.g。 ord('a')是97 &amp; ord('b')在ASCII
中为98ord('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')表示大写为modulo)。生成密码 - 步骤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算法。