gpt4 book ai didi

Python ASCII 加密程序

转载 作者:行者123 更新时间:2023-12-01 09:06:11 27 4
gpt4 key购买 nike

美好的一天,

我创建了一个简单的 ASCII 加密程序,但我只有 3 个问题:

  1. 如何检查输入的 key 是否错误,并告诉我的程序在输入错误时不要尝试解密。
  2. 为什么加密后的文本比原始文本长?
  3. 如果我想加密 ASCII 文本以外的其他内容,会有多困难?

谢谢,下面是我的代码和结果:

import time
key = "This■isôthe╝key¦b££glkHPAfgbm(*&%$$*(■ô▀"
string = "Encryption the hell out of me, even if I repeatttttttt lettersssss you can't tell"

entext = ""
detext = ""
keycnt=0

print("Displaing Text to be Encrypted")
time.sleep(1)
print(string)
time.sleep(5)

#Loops through the string and the key and adds the ascii values together to create a Encrypted character
for sLetter in string:
entext += chr(ord(sLetter) + ord(key[keycnt]))
keycnt += 1
if keycnt == len(key):
keycnt =0


print("Displaying encrypted Text")
time.sleep(1)
print(entext)

#Resetting key position
keycnt=0

#Loops through the string and the key and subtracts the ascii values together to create a decrypted character
for sLetter in entext:
detext += chr(ord(sLetter) - ord(key[keycnt]))
keycnt += 1
if keycnt == len(key):
keycnt =0
time.sleep(2)

print("Displaying decrypted Text")
time.sleep(1)
print(detext)
time.sleep(1)

最佳答案

首先,与 key 字符相加不是一个好的密码,甚至不是一个好的凯撒或维吉尼亚密码。为此,您需要模加法:普通字母表的模数 26(但没有大写或小写和其他字符)或字节的模数 256。对于字节,您需要为 key 的每个字节提供一个随机值。

目前你的密文有一个偏差:如果你将一个字符值与 0x00 和一个值为 0x00 的 key 相加,那么你将得到 0x00 作为密文字节。问题是值 0x00只有在加密方案中使用特定的组合才能达到。因此,如果您看到值 0x00,那么您将立即知道 key 和明文值。

How could I check if the key in entered incorrectly and tell my program not to attempt to decrypt if it has been entered incorrectly.

无法检查 key 的值是否正确。您唯一能做的就是验证输出是否符合您的预期。

现代密码学使用消息认证码 (MAC) 来创建认证标签。可以根据密文和 key (或者,对于安全性较低的方案,明文和 key )来验证此标签。还有一些经过身份验证的加密模式,例如 GCM,它们基本上是内置 MAC 身份验证的密码。

Why is the encrypted text longer than the original?

如果您添加 255 或更低的值,那么您将得到 510 或更低的值。然而,这些值至少需要两个字节来编码。

If I wanted to encrypt other things not ASCII text how hard would it be?

没那么难:只需使用真正随机的 key 执行 XOR 或模加法(例如 8 位/一个字节的模 256)。但是,要创建任何安全的内容,您可以使用一次性密码本(其中 key 与二进制明文的大小相同)或现代密码。

关于Python ASCII 加密程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52028845/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com