大数据安全 | 【实验】凯撒加密与解密

文章目录

  • 实验目的
  • 关于凯撒加密
    • 输入任意明文和密钥K=10,对其进行凯撒加密;
    • 输入密文和密钥K=10,对其进行凯撒解密。
    • (暴力)破译密文
  • 分析体会

实验目的

  • 通过实际编程掌握凯撒密码的加密、解密与破译,加深对凯撒密码算法的认识。
  • 1)输入任意明文和密钥K=10,对其进行凯撒加密;
  • 2)输入密文和密钥K=10,对其进行凯撒解密。
  • 3)破译如下密文:Izqzm piyzmznodhvoz tjpm kjrzm oj xcvibz tjpmnzga!

关于凯撒加密

大数据安全 | 【实验】凯撒加密与解密_第1张图片
大数据安全 | 【实验】凯撒加密与解密_第2张图片
大数据安全 | 【实验】凯撒加密与解密_第3张图片

实际上就是k是几,就移几位。移位加密的安全性——!!——暴力穷举:把25种可能都试一遍。

输入任意明文和密钥K=10,对其进行凯撒加密;

  1. 首先通过input函数获取用户输入的明文和密钥。
  2. 然后通过循环遍历明文中的每个字符。
    1. 对于空格字符,不进行加密处理,直接保留;
    2. 对于小写字母,通过计算将其位移n个位置后,再转换为相应的ASCII码,也就是小写输出为小写。
    3. 对于其他情况,默认为大写字母,同样通过计算进行位移加密。大写输出为大写。
  3. 最后,将加密后的字符逐个拼接起来,并输出为密文。
a = input("请输入你想要加密的明文:")
n = int(input("请输入你的密钥:"))
b = ""
for letter in a:
    if letter == " ":  
        temp = " "#空格不加密
    elif letter.islower():# 判断是否为小写字母
        temp = chr((ord(letter) - ord("a") + n) % 26 + ord("a"))  # 加密后保持小写
    else:  # 其他情况默认为大写字母
        temp = chr((ord(letter) - ord("A") + n) % 26 + ord("A"))  # 加密后保持大写
    b += temp#将加密后的字符逐个拼接起来
print("密文为:",b)

大数据安全 | 【实验】凯撒加密与解密_第4张图片

输入密文和密钥K=10,对其进行凯撒解密。

  1. 首先通过input函数获取用户输入的密文和密钥。
  2. 然后通过循环遍历明文中的每个字符。
    1. 对于空格字符,不进行解密处理,直接保留;
    2. 对于小写字母,通过计算将其位移n个位置后,再转换为相应的ASCII码,也就是小写输出为小写。
    3. 对于其他情况,默认为大写字母,同样通过计算进行位移解密。大写输出为大写。
  3. 最后,将解密后的字符逐个拼接起来,并输出为明文。
a = input("请输入你想要解密的密文:")
n = int(input("请输入你的密钥:"))
b = ""
for letter in a:
    if letter == " ":  
        temp = " " # 空格不加密
    elif letter.islower():  # 判断是否为小写字母
        temp = chr((ord(letter) - ord("a") - n) % 26 + ord("a"))  # 解密后保持小写
    else:  # 其他情况默认为大写字母
        temp = chr((ord(letter) - ord("A") - n) % 26 + ord("A"))  # 解密后保持大写
    b += temp  # 将解密后的字符逐个拼接起来
print("明文为:",b)

大数据安全 | 【实验】凯撒加密与解密_第5张图片

(暴力)破译密文

  1. 首先定义了三个字符串变量total、upper和lower分别表示所有字母字符、大写字母和小写字母。
  2. 通过input函数获取用户输入的密文。接下来,通过循环从1到25(共25个可能的钥匙,这里默认先不考虑0,也就是不移位)遍历所有钥匙值。
  3. 在内层循环中,对于密文中的每个字符进行处理。
    1. 首先判断字符是否在字母字符total中。如果是,则判断字符是大写字母还是小写字母。
    2. 对于大写字母,通过字符串方法find()函数找到字符在upper中的位置,然后进行钥匙的逆向位移操作;
    3. 对于小写字母,通过字符串方法find()函数找到字符在lower中的位置,然后进行钥匙的逆向位移操作。处理完字符后,将解密后的字符追加到字符串b的末尾。
    4. 如果字符不在字母字符total中,则直接将字符追加到字符串b的末尾。
  4. 最终,输出每个钥匙对应的解密结果。
total = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
lower = "abcdefghijklmnopqrstuvwxyz"

a = input("请输入你要破解的密文:")
for key in range(1,26):
    b = ""
    for i in a:
        if i in total:
            if i.isupper():  #密文字母为大写
                num = upper.find(i)  #在字母里搜索到密文字符的位置
                num = num - key
                if num < 0:
                    num = num + len(upper)
                b = b + upper[num]  #将解密后字符追加到字符串末尾
            elif i.islower():  #密文字母为小写
                num = lower.find(i)  #在字母里搜索到密文字符的位置
                num = num - key
                if num < 0:
                    num = num + len(lower)
                b = b + lower[num]  #将解密后字符追加到字符串末尾
        else:
            b = b + i  #如果密文中内容不在字母里则不解密,直接追加
    print('第%d把钥匙的结果是%s' %(key, b)) 

大数据安全 | 【实验】凯撒加密与解密_第6张图片

  • 破解得:Never underestimate your power to change yourself!

分析体会

凯撒加密是一种简单而易于理解的加密方法,但由于只有26个可能的位移值,因此被认为是相对较弱的加密算法。在现代密码学中,它通常被用作教学示例或简单的加密需求,而不适用于安全性要求较高的场景。


参考博客:

  • Python基础编程入门实例:恺撒密码
  • python 内置函数ord()和chr()函数用法详解
  • python中islower()、isupper()、istitle()函数的用法详解

你可能感兴趣的:(#,大数据安全,大数据管理与分析,安全,密码学)