【问题标题】:Block Cipher Python unichr() output formatting Issues块密码 Python unichr() 输出格式问题
【发布时间】:2014-12-28 20:37:19
【问题描述】:

我正在尝试编写一个可以使用分组密码加密和解密文本的 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 值(十进制)列表。而 textlist 是将文本转换为每个字符的十进制 ascii 值列表。我已经使用 print 来确认这些输出的列表是否正确。

问题是我尝试过的几个输入都没有产生答案。更重要的是,通过将 print 替换到各个地方,我发现 str(unichr(element^rawkeylist[kli])) 在对 unichr 做了一些研究后没有输出任何东西我发现它实际上输出了 u'_____' (用 _____ 作为占位符)。

我无法将我的 ASCII 值转换回字符,但这似乎不是最具创新性的解决方案。我也非常怀疑使用字符串添加到我的答案的有效性。最后,我只是在应用密码时通过密钥的字符进行循环,在做了一些研究之后,我听说了一种我觉得我应该使用的叫做填充的东西。

所以请帮我猜。

【问题讨论】:

  • 如果您专注于一个特定问题(因此在这种情况下,暂时不要担心填充)并准确告诉我们您想要什么行为,您更有可能获得帮助。
  • 这是什么分组密码?似乎一次性密码 (OTP) 带有一个完全不安全的重复密钥。

标签: python encryption ascii block-cipher


【解决方案1】:

您可以继续将密文视为字节(例如,您可以存储二进制文件或通过 HTTP 发送二进制数据),也可以使用 base 64 或十六进制编码将其编码为文本。在解密之前,您当然应该将字符串解码回二进制密文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 2011-10-04
    • 2013-06-11
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2021-09-22
    相关资源
    最近更新 更多