我正在尝试使用Python编写加密代码。它加密,但不使用ASCII字符,我不确定为什么。我对python非常陌生,希望获得一些帮助
def encrypt(text, shift):
cipher=""
for char in range(len(text)):
char = text[char]
if (char.isupper()):
cipher += chr((ord(char) + shift - 65) % 26 + 65)
else:
cipher += chr((ord(char) + shift - 97) % 26 + 97)
return cipher
正在加密,但不返回ASCII字符
公式
enc = (char + shift - offset) % m + offset
隐式定义一个在其边界内进行加密的字母,即this字母内的字符映射到this字母的另一个字符。例如,大写字母的偏移量为65,模数为26(字母中的字符数)。这将字母定义为65(A)到65 + 26-1 = 90(Z)之间的范围。包含在内的字符。 A和Z始终映射到包括在内的字符。 A和Z和never到字母outside的字符。小写字母也是如此。因此:print("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
print(encrypt("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 5));
输出结果:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
FGHIJKLMNOPQRSTUVWXYZABCDEfghijklmnopqrstuvwxyzabcde
如果还包括特殊字符,则必须相应地选择范围,例如作为范围,包括32(空格)及以上126(〜)。这对应于32的偏移量和126-32 +1 = 95(字母的字符数)的模数。由于连续范围,不再需要if语句,因此只需应用:contiguous
cipher += chr((ord(char) + shift - 32) % 95 + 32)
以下代码:
print(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~");
print(encrypt(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", 5));
然后产生输出:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$
现在也包含特殊字符。