加密时不返回ASCII字符

问题描述 投票:0回答:1

我正在尝试使用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字符

python-3.x encryption caesar-cipher
1个回答
1
投票

公式

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

如果还包括特殊字符,则必须相应地选择范围,例如作为

contiguous

范围,包括32(空格)及以上126(〜)。这对应于32的偏移量和126-32 +1 = 95(字母的字符数)的模数。由于连续范围,不再需要if语句,因此只需应用:cipher += chr((ord(char) + shift - 32) % 95 + 32)
以下代码:

print(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"); print(encrypt(" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", 5));

然后产生输出:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ %&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$

现在也包含特殊字符。
© www.soinside.com 2019 - 2024. All rights reserved.