python - 有时在加密数据时,我的代码会返回带有奇怪符号的特定结果
问题描述
我正在用 python3 学习密码学
现在我正在研究凯撒密码,这是我的问题
我尝试使用密钥 16 加密“hdjdyueeje”,结果是“zwzt??uuzu”
你能解释一下我做错了什么以及如何解决它
我的代码:
print("\n----------------Caesar_Cipher----------------\n")
print(' 1) Crypt mode')
print(" 2) Decrypt mode")
try:
mode = int(input('\n [#] Enter number what you need (1,2) : '))
if mode == 1:
print("\n--------Crypting process is starting---------")
key = int(input("\n [#] Enter here key which will be used to crypt data \n (number from 1 to 25 including) --> "))
if 1 >= key or key > 25:
print(" You choosed wrong number. I will make it 1 automatically")
key = 1
else:
pass
msg = input("\n [#] Now enter your message what you wanna crypt \
\n -->")
print("")
msgc = ""
for letter in msg:
x = ord(letter)
y = chr(x + key)
msgc += y
print('\n Crypted data -->',msgc)
elif mode == 2:
print("\n-------Decrypting process is starting--------")
key = int(input("\n [#] Enter here key which will be used to decrypt data \n (number from 1 to 25 including) --> "))
if 1 >= key or key > 25:
print(" You choosed wrong number. I will make it 1 automatically")
key = 1
else:
pass
msg = input("\n [#] Now enter your message what you wanna decrypt \
\n -->")
print("")
msgd = ""
for letter in msg:
x = ord(letter)
y = chr(x - key)
msgd += y
print('\n Decrypted data -->',msgd)
else:
print("Number not defined")
就这样
解决方案
你的问题在这里:
x = ord(letter)
y = chr(x + key) # <- problem
msgc += y
如果没有足够的字母留下更高的代码,则字母表需要环绕。例如,当您尝试加密时,y
您只能添加 1 来获取z
. 如果密钥为 2,则您需要环绕并返回a
. 这种“环绕”可以很容易地通过减去字母表的长度来完成。此版本的代码有效:
x = ord(letter)
y = x + key
if y > ord('z'):
y -= 26
msgc += chr(y)
请注意,这只适用于小写字母。
推荐阅读
- bash - 为什么测试第一个字符会跳过空行?
- tcp - 如何使每个 MQTT Publih 消息在单独的数据包中?
- sql-server - SQL server 位类型 Access 链接表
- coded-ui-tests - 如何在codedui中选择正确的组合框
- azure - 如何从 azure 数据湖中读取行分隔的 json 文件并使用 usql 进行查询
- powershell - 将 dir 输出作为参数传递给另一个命令
- python - Django REST Framework,保存到自定义用户模型的额外字段
- mysql - 带有嵌套 MySQL 查询的 NodeJS 等待/异步
- c# - 处理asp.net core localdate模型绑定异常
- sql - 如何使用 Javascript 和 SQL 计算“总数”?