我正在尝试编写一个可以使用分组密码加密和解密文本的python脚本,但是我总是得到完全空白的输出。在尝试追踪问题的根源后,我意识到在我执行了 XOR 按位运算 (a^b) 后,我的脚本无法将新的 ascii 值转换为字符。
def blockcrypt(text,key):
rawkeylist = rawintkey(key)
textlist = asciitextlist(text)
answer=''
kli = 0
for element in textlist:
answer+=str(unichr(element^rawkeylist[kli]))
kli+=1
if kli==len(rawkeylist):
kli=kli%len(rawkeylist)
return answer
其中 rawkeylist 是转换为每个字符的 ascii 值列表(十进制)列表的原始键。文本列表是转换为每个字符的十进制 ASCII 值列表的文本。我已经使用打印来确认这些正在输出正确的列表。
问题是对于我尝试过的几个输入,没有产生答案。更重要的是,通过将打印替换到各个地方,我发现str(unichr(element^rawkeylist[kli]))在对 unichr 进行一些研究后,我没有输出任何东西,我发现它实际上输出了 u'_____'(将 _____ 作为任何内容的占位符)。
我无法将我的 ASCII 值转换回字符,但这似乎不是最具创新性的解决方案。我也非常怀疑使用字符串添加到我的答案中的有效性。最后,在应用密码时,我只是简单地回收了密钥的字符,在做了一些研究之后,我听说了一种叫做填充的东西,我觉得我应该使用它。
所以嗯,请帮忙我猜。
您可以继续将密文视为字节(例如,您可以存储二进制文件或通过HTTP发送二进制数据),也可以使用base 64或十六进制编码将其编码为文本。在解密之前,您当然应该将字符串解码回二进制密文。