黑客凯撒密码
#编程 #教程 #python #cryptography

介绍

密码学是在第三方存在下安全通信的实践。在整个历史上,人们都使用各种技术来保护他们的信息,从简单的替代密码到更高级的加密方法。 Caesar Cipher是一种经典的加密方法,将在本文中进行讨论。如今,它的使用不多,因为它很容易破裂。但是,它实现了安全不是主要问题的教学和随意加密的目的。

关于凯撒密码

凯撒密码是最古老,最简单的加密算法之一。它以朱利叶斯·凯撒(Julius Caesar)的名字命名,后者用它与将军秘密交流。 Caesar Cipher背后的想法是将明文中的每个字母替换为一个字母,该字母是字母下方的固定位置。例如,如果钥匙是3,则明文中的每个字母将被字母下方的三个位置所取代。因此,'a'变为d','b'变为'e','c'变成'f',依此类推。

怎么运行的

Caesar Cipher通过在明文中将每个字母移动到字母下的固定数量的位置来工作。移动位置的数量称为键或移位值。使用Caesar Cipher加密字母的公式是:

E(x) = (x + k) mod 26

其中x是字母的数值(a = 0,b = 1,c = 2,...,z = 25),k是键或移位值,而mod 26表示剩余当除以26。

解密字母,公式为:

D(x) = (x - k) mod 26

其中x是加密字母的数值值,k是键或移位值,而mod 26表示在除以26时占据剩余的。

例子

假设明文是“ hello”,而钥匙是3。然后,根据加密公式,明文中的每个字母都会由3个位置向下移动。

H -> K
E -> H
L -> O 
L -> O
O -> R

因此,密文是“ khoor”。要解密密文,我们只需根据解密公式将每个字母返回3个位置:

K -> H
H -> E
O -> L
O -> L
R -> O

因此,明文再次是“你好”。

加密表和凯撒轮

为了使执行加密和解密变得更容易,我们可以创建一个表格,以显示明文字母和密文字母之间的对应关系,以及字母的数值。假设键是23,然后加密表看起来像这样。

Fig 1. Encryption Table

另一个使凯撒轮中执行加密或解密更容易的工具是凯撒轮。 Caesar Cipher Wheel是一种用于加密和解密的工具。它由一个圆盘组成,并带有字母的字母,以特定顺序写在其周围。磁盘可以旋转到任何位置,从而使用户可以将字母的一定位置向右或向左移动。为了加密消息,授权的每个字母都被右侧右侧的一定数量的字母代替。为了解密消息,该过程通过将字母转移到左侧而逆转。

Fig 2. The Caesar Wheel

代码

我选择了Python编程语言,因为它简单明了,简单地理解。可以从这里下载加密解码脚本以及黑客脚本:

Caesar Cipher

Caesar Cipher is one of the oldest and simplest encryption algorithms. It is named after Julius Caesar, who used it to communicate secretly with his generals. The idea behind Caesar Cipher is to replace each letter in the plaintext with a letter that is a fixed number of positions down the alphabet. For example, if the key is 3, then each letter in the plaintext will be replaced by the letter that is three positions down the alphabet. Thus, 'A' becomes 'D', 'B' becomes 'E', 'C' becomes 'F', and so on.

How it works

Caesar Cipher works by shifting each letter in the plaintext by a fixed number of positions down the alphabet. The number of positions shifted is known as the key or the shift value. The formula for encrypting a letter using Caesar Cipher is:

koude6

where koude0 is the…

如果您不想自己编写代码或复制代码。但是,如果您是编码的初学者,我建议您自己键入代码,因为这将使您更好地理解。

加密和解密

这是 encryption_decription.py
的源代码

# This code will encrypt or decrypt a Caesar Cipher
# Core encryption/decryption function
def caesar_cipher(text, shift, mode):
    result = ""

    if mode == "decrypt":
        shift = -shift  # Reverse the shift for decryption

    for char in text:
        if char.isalpha():
            ascii_offset = ord('A') if char.isupper() else ord('a')
            char = chr((ord(char) - ascii_offset + shift) % 26 + ascii_offset)
        result += char

    return result

# Get mode
while True:
    print('Do you want to (e)ncrypt or (d)ecrypt?')
    response = input('> ').lower()
    if response.startswith('e'):
        action = 'encrypt'
        break
    elif response.startswith('d'):
        action = 'decrypt'
        break
    print('Please enter the letter e or d.')

print("Enter the message.")
message = input('> ')

# Get shift value
while True:
    maxKey = 26
    print('Please enter the key (0 to 25) to use.')
    response = input('> ').upper()
    if not response.isdecimal():
        continue

    if 0 <= int(response) < 26:
        key = int(response)
        break

# Perform encryption/decryption
result = caesar_cipher(message, key, action)

# Display the result
print(f"Result: {result}")

让我们了解脚本的工作方式。

caesar_cipher()函数带有三个参数:text是加密或解密的消息,shift是移动每个字母的位置数,而mode指定是加密还是解密。

if char.isalpha():条件检查字符是否是字母。它确保只处理字母字符,忽略任何其他字符,例如空格或标点符号。

如果字符是字母,则代码根据字母是大写还是小写,确定ASCII偏移。如果字符是大写,则ASCII偏移设置为“ A”(ASCII中的65)的值,如果字符是小写,则将偏移设置为“ A”(ASCII中的97)的值。

接下来,代码在字符上执行移位操作。它从当前字符的ASCII值中减去ASCII偏移,然后添加移位值,并最终应用Modulo Operator%26,以确保结果停留在字母范围内。此步骤有效地将字符通过指定数量的位置移动。

转移字符后,它使用chr()函数将其转换回一个字符,并将结果字符连接到结果变量。

输入文本中的每个字符都重复此过程,从而导致整个消息的加密或解密。

程序提示用户选择是加密还是解密,然后提示该消息加密/解密和移位值。 caesar_cipher()函数与适当的参数调用,并显示结果。

行动程序

这是执行 Encryption_decryption.py 的输出的示例:

Do you want to (e)ncrypt or (d)ecrypt?
> e
Enter the message.
> Enemy is approaching! Send troops immediately!
Please enter the key (0 to 25) to use.
> 11
Result: Pypxj td laaczlnstyr! Dpyo eczzad txxpotlepwj!

Do you want to (e)ncrypt or (d)ecrypt?
> d
Enter the message.
> Pypxj td laaczlnstyr! Dpyo eczzad txxpotlepwj!
Please enter the key (0 to 25) to use.
> 11
Result: Enemy is approaching! Send troops immediately!

就是 engryption_decryption.py 。让我们继续攻击凯撒密码。

黑客凯撒密码

要破解凯撒密码,我们使用了一种称为蛮力技术的技术,也称为详尽的搜索。

在密码学中,蛮力攻击是一种尝试所有可能的密钥或密码来解密加密数据的方法。它涉及系统地尝试所有组合,直到找到正确的组合为止。该技术可能耗时且计算昂贵,尤其是使用更长,更复杂的钥匙。为了防止蛮力攻击,加密系统使用更强大,更长的键,这实际上是在合理的时间范围内尝试所有组合的几乎不可行的。

然而,蛮力可以对凯撒密码有效,因为凯撒密码的钥匙空间很小,可能的键数量有限。 Caesar Cipher是一个简单的替代密码,将明文的每个字母移动到字母内的固定位置。由于英语字母只有26个可能的转变,因此蛮力攻击可以轻松尝试所有26种可能性来解密密文。通过系统地尝试每个班次,可以发现正确的明文。

不幸的是,蛮力技术没有足够复杂的方法来确定何时找到正确的钥匙。它依靠人来读取输出并确定哪种解密产生了原始的英语消息。

这是名为 decipher.py 的黑客脚本:

# This code will decipher a Caesar Cipher

# Get cipher text
print("Enter the Caesar Cipher text")
message = input("> ")

for shift in range(26):
    result = ''
    for char in message:
        if char.isalpha():
            ascii_offset = ord('A') if char.isupper() else ord('a')
            char = chr((ord(char) - ascii_offset - shift) % 26 + ascii_offset)
        result += char

    print(f"Key: {shift} | Decrypted message: {result}")

请注意,代码几乎与 encryption_decryption.py caesar_cipher()函数相同。黑客程序实现了相同的解密逻辑,除了它在for循环中这样做,该循环为每个可能的密钥运行代码。

这是上述代码的示例输出:

Enter the Caesar Cipher text
> Pypxj td laaczlnstyr! Dpyo eczzad txxpotlepwj!
Key: 0 | Decrypted message: Pypxj td laaczlnstyr! Dpyo eczzad txxpotlepwj!
Key: 1 | Decrypted message: Oxowi sc kzzbykmrsxq! Coxn dbyyzc swwonskdovi!
Key: 2 | Decrypted message: Nwnvh rb jyyaxjlqrwp! Bnwm caxxyb rvvnmrjcnuh!
Key: 3 | Decrypted message: Mvmug qa ixxzwikpqvo! Amvl bzwwxa quumlqibmtg!
Key: 4 | Decrypted message: Lultf pz hwwyvhjopun! Zluk ayvvwz pttlkphalsf!
Key: 5 | Decrypted message: Ktkse oy gvvxuginotm! Yktj zxuuvy osskjogzkre!
Key: 6 | Decrypted message: Jsjrd nx fuuwtfhmnsl! Xjsi ywttux nrrjinfyjqd!
Key: 7 | Decrypted message: Iriqc mw ettvseglmrk! Wirh xvsstw mqqihmexipc!
Key: 8 | Decrypted message: Hqhpb lv dssurdfklqj! Vhqg wurrsv lpphgldwhob!
Key: 9 | Decrypted message: Gpgoa ku crrtqcejkpi! Ugpf vtqqru koogfkcvgna!
Key: 10 | Decrypted message: Fofnz jt bqqspbdijoh! Tfoe usppqt jnnfejbufmz!
Key: 11 | Decrypted message: Enemy is approaching! Send troops immediately!
Key: 12 | Decrypted message: Dmdlx hr zooqnzbghmf! Rdmc sqnnor hlldchzsdkx!
Key: 13 | Decrypted message: Clckw gq ynnpmyafgle! Qclb rpmmnq gkkcbgyrcjw!
Key: 14 | Decrypted message: Bkbjv fp xmmolxzefkd! Pbka qollmp fjjbafxqbiv!
Key: 15 | Decrypted message: Ajaiu eo wllnkwydejc! Oajz pnkklo eiiazewpahu!
Key: 16 | Decrypted message: Zizht dn vkkmjvxcdib! Nziy omjjkn dhhzydvozgt!
Key: 17 | Decrypted message: Yhygs cm ujjliuwbcha! Myhx nliijm cggyxcunyfs!
Key: 18 | Decrypted message: Xgxfr bl tiikhtvabgz! Lxgw mkhhil bffxwbtmxer!
Key: 19 | Decrypted message: Wfweq ak shhjgsuzafy! Kwfv ljgghk aeewvaslwdq!
Key: 20 | Decrypted message: Vevdp zj rggifrtyzex! Jveu kiffgj zddvuzrkvcp!
Key: 21 | Decrypted message: Uduco yi qffheqsxydw! Iudt jheefi yccutyqjubo!
Key: 22 | Decrypted message: Tctbn xh peegdprwxcv! Htcs igddeh xbbtsxpitan!
Key: 23 | Decrypted message: Sbsam wg oddfcoqvwbu! Gsbr hfccdg waasrwohszm!
Key: 24 | Decrypted message: Rarzl vf nccebnpuvat! Fraq gebbcf vzzrqvngryl!
Key: 25 | Decrypted message: Qzqyk ue mbbdamotuzs! Eqzp fdaabe uyyqpumfqxk!

结论

以前,我提到凯撒密码不适合严重的加密目的。这篇文章是针对有兴趣探索密码学领域并希望增强其编程技能的初学者的。尽管有许多可用的加密方法,但凯撒密码是最直接理解的密码之一。但是,将来我将发布更多内容,以更深入地讨论其他类型的密码。