如何修改我的代码以输出加密前和解密后输入的相同文本?



我已经编写了加密和解密的代码(不使用密钥),我希望在解密消息后,在加密时输入的消息应该按原样打印。

根据我所做的,我在运行解密算法后成功获取消息,但结果不符合我在提供输入时提供的顺序。这意味着:"h"被转换为"H",其他字母也是如此。

# Encryption
# Trial 4
in_text = input('Enter the text that you want to encrypt: ').lower()
out_text = []
for i in in_text:
if i == ' ':
out_text.append(i)
continue
elif i in 'aeiou':
out_text.append(ord(i) + 4)
continue
else:
out_text.append(i)
final = ''.join(str(e) for e in out_text)
print(final)
# Decryption
# Trial 2
import string
user_input = input('Enter the text that you want to decrypt: ')
d_out = []
z = ''
for i in user_input:
if i == ' ':
d_out.append(i)
continue
elif i in 'bcdfghjklmnpqrstvwxyz':
d_out.append(i)
continue
elif i in string.digits:
z = z + i
n = len(z)
if n == 3:
d_out.append(chr(int(z) - 4))
z = ''
my_str = ''
for a in d_out:
my_str = my_str + a
print(f'The decrypted message is: {my_str.title()}')
当我删除加密代码中的".lower()">

和解密代码中的".title()"时,解密后结果不同,并且打印了一些特殊字符。

请让我知道我如何进行相同的操作。

您的回复将不胜感激!

案例1

加密

输入要加密的文本:hello World H105LL115 W115RLD

解密

输入要解密的文本:h105ll115 w115rld 解密的消息是:你好世界

案例2

删除".lower()">

和".title()"之后

使加密代码如下所示:

in_text = input('Enter the text that you want to encrypt: ')
out_text = []
for i in in_text:
if i == ' ':
out_text.append(i)
continue
elif i in 'aeiouAEIOU':
out_text.append(ord(i) + 4)
continue
else:
out_text.append(i)
final = ''.join(str(e) for e in out_text)
print(final)

按如下方式制作解密代码:

import string
user_input = input('Enter the text that you want to decrypt: ')
d_out = []
z = ''
for i in user_input:
if i == ' ':
d_out.append(i)
continue
elif i in 'bcdfghjklmnpqrstvwxyz':
d_out.append(i)
continue
elif i in string.digits:
z = z + i
n = len(z)
if n == 3:
d_out.append(chr(int(z) - 4))
z = ''
my_str = ''
for a in d_out:
my_str = my_str + a
print(f'The decrypted message is: {my_str}')

输出如下:

加密

输入要加密的文本:你好世界 H105ll115 W115RLD

解密

输入要解密的文本:H105ll115 W115rld 解密的消息是:ello world

案例 1 和案例 2 都有不同的输出,但"h"为"H"或"W"为"w"或其他字符相同顺序的问题仍然存在。

有多个问题。

首先,只有您的加密过程才会考虑上限。

其次,您在解密过程中逐个字符检查密文,而您的加密则直接使用ordord将为每个字符生成多个数字。


这类问题可以而且应该使用调试器而不是StackOverflow来发现。这不是异常的程序执行,代码正在做你告诉它做的事情 - 但这是不正确的。

我会首先看一下 Viginere 实现,如果您不知道如何执行此类编码,我会从中获取提示。


您将不得不以某种方式解决多位数问题,否则如果每个数字彼此相邻,您将无法区分它们的开始或结束位置。例如,您可以将数字放在括号中,例如[69]用于 A 的"加密"(呵呵,密文中的有趣位置),如果您需要括号成为文本的一部分,[[]]像这样的转义括号。

这应该是你的方案描述的一部分,你可能应该在(重新)开始编程之前考虑一下。随机尝试的东西是行不通的。

最新更新