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


    📚实验目的

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

    📚关于凯撒加密

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    实际上就是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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    🔥输入密文和密钥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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    🔥(暴力)破译密文

    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)) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述

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

    📚分析体会

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


    参考博客:

  • 相关阅读:
    通达OA v12流程中心
    从零开始 Spring Boot 21:Activiti
    NISP是什么?
    Vite -静态资源处理 - 普通的图片
    华为OD机试 - 模拟目录管理功能(Java & JS & Python & C)
    PCL+vs环境配置
    基于51单片机的空气温湿度及土壤湿度浇花控制WIFI无线传输系统proteus仿真原理图
    Docker环境搭建及学习
    【大数据】Spark使用大全:下载安装、RDD操作、JAVA编程、SQL
    vue里样式不起作用的方法,可以通过deep穿透的方式
  • 原文地址:https://blog.csdn.net/m0_63398413/article/details/132868854