python - 无法获得正确的代码输出?
问题描述
原始加密如下(我已经完成了):对于密钥中的每个字母和明文中的每个字母(它们的长度相同),您计算 ascii 值,找到 XOR 结果,将其转换为十进制,将 32 添加到该值,然后转换回 char。char 将是密文。.
key = this is a cool key
plaintext = Wonderland is cool
ciphertext= C''7e;?a/dc&<lc$*5
def decryption(ciphertext,key):
plaintext = ""
for k in range(len(ciphertext)):
i = ciphertext[k]
j = key[k]
val = xor_calc(chr(ord(i)-32), chr(ord(j)-32))
val = chr(ord(xor)+ 32)
plaintext += val
解密后我得到:onderland很酷
显然应该匹配原始明文,另外还有其他密码和缺少字母的密钥。不过,我的加密工作正常,因为我的答案与结果相符。任何帮助,将不胜感激!
忘了提我有一个函数 xor_calc 接受密码和密钥字母,转换为 ascii 并计算 XOR 结果并返回 char
解决方案
简化你xor
为我工作的计算:
xor = chr((ord(i)-32) ^ (ord(j)-32) + 32)
事实上,如果我跑步decryption(plaintext,key)
,我会得到你的ciphertext
;如果运行decryption(ciphertext,key)
,我得到你的plaintext
。(这是有道理的,因为xor
它是可逆的。)
推荐阅读
- spring-data - 使用规范通过 IGNITE 执行查询
- python - 在 python 中进行子类化以在客户端代码中解耦的正确方法
- sql-loader - SQL 加载程序:列 DR165_CREDIT_LIMIT_EXP_DT :不是有效的月份错误
- python - 使用变量导入和使用 django 模型类
- mysql - 如何在相等的桶中按距离排序?
- python - 我正在做一个 re.findall 一个字符串,我得到一个错误:错误:在位置 0 没有重复
- azerothcore - 尝试使用 DB 汇编器时出错:在用户表中找不到任何匹配的行
- c++ - “谓词不应因函数调用而修改其状态”是什么意思?
- python - AWS DataSync Lambda 自动化
- ruby-on-rails - 如何使用rails和postgres异步更新不同的json(jsonb)属性?