凯撒密码(Python)

这篇具有很好参考价值的文章主要介绍了凯撒密码(Python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、凯撒密码是什么?

凯撒密码是一种非常古老的加密方法,最初由古罗马的凯撒大帝使用。凯撒大帝将纸条卷起后,按照字母表顺序向后移动一定的位数,然后再写下加密后的字母,这样其他人就无法直接读取他的信息。

凯撒密码(移位密码):是一种替换加密,明文中的所有字母都在字母表上向后或向前按照一个固定数目进行偏移后被替换成密文。

例如,偏移量为3位的时候:A对应D,B对应E,C对应F等

当偏移量为13位的时候,凯撒密码又叫回转密码ROT13):明文加密得到密文,密文再加密就会得到明文(因为偏移量为13位,一共26个字母,加密两次就会回到明文了),题目关键字眼会有回转、回旋、十三踢等字眼。

题目:十三踢!
密文:Nusynt
明文:AHflag

而在今天,作为一种经典的加密算法,凯撒密码仍然被广泛应用于密码学领域,本文将使用Python编写一个凯撒密码的加密器和解密器。

二、凯撒密码的加密和解密原理:

加密:将每个字母都向后移动k位,其中k为加密密钥。

解密:反向操作,将每个字母都向前移动k位。

三、使用Python实现凯撒密码的加密

def encryption(str,k):
    result = ""
    for i in range(len(str)):
        if str[i].isupper():
            result += chr((ord(str[i]) + k-65) % 26 + 65)
        else:
            result += chr((ord(str[i]) + k - 97) % 26 + 97)
    return result

代码解释:

1.定义加密函数encryption(str,k),其中str为需要加密的字符串,k为加密密钥。使用for循环计算每个字母加密后的ASCII码。

2.使用ord函数获取每个字母的ASCII码,isupper函数判断字母是否为大写字母,如果是,则减去65('A')后进行移位加密;如果是小写字母,则减去97('a')后进行移位加密,最后使用chr将ASCII码转换为字母。

3.将加密后的每个字母拼接到result字符串中,并返回result。

四、使用Python实现凯撒密码的解密

def decryption(str,k):
    result = ""
    for i in range(len(str)):
        if str[i].isupper():
            result += chr((ord(str[i]) - k - 65) % 26 + 65)
        else:
            result += chr((ord(str[i]) - k - 97) % 26 + 97)
    return result

代码解释:

1.定义解密函数decryption(str,k),其中str为需要解密的字符串,k为解密密钥。使用for循环计算每个字母解密后的ASCII码。

2.使用ord函数获取每个字母的ASCII码,isupper函数判断字母是否为大写字母,如果是,则减去65后进行移位解密;如果是小写字母,则减去97后进行移位解密,最后使用chr将ASCII码转换为字母。

3.将解密后的每个字母拼接到result字符串中,并返回result。文章来源地址https://www.toymoban.com/news/detail-753894.html

五、代码示例

def encryption(str,k):
    result = ""
    for i in range(len(str)):
        if str[i].isupper():
            result += chr((ord(str[i]) + k-65) % 26 + 65)
        else:
            result += chr((ord(str[i]) + k - 97) % 26 + 97)
    return result

def decryption(str,k):
    result = ""
    for i in range(len(str)):
        if str[i].isupper():
            result += chr((ord(str[i]) - k - 65) % 26 + 65)
        else:
            result += chr((ord(str[i]) - k - 97) % 26 + 97)
    return result

if __name__ == '__main__':
    while True:
        choice = input("请选择加密或解密:\na.加密\nb.解密\nc.退出\n")
        if choice == 'a':
            str = input("请输入需要加密的字符串:")
            k = int(input("请输入加密密钥:"))
            print("加密后的字符串为:", encryption(str,k))
        elif choice == 'b':
            str = input("请输入需要解密的字符串:")
            k = int(input("请输入解密密钥:"))
            print("解密后的字符串为:", decryption(str,k))
        elif choice == 'c':
            break

到了这里,关于凯撒密码(Python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 全国计算机等级考试——二级JAVA完整大题题库【五十三道】

    编写于2023.04.10 分为40道选择题和3道大题(大题是程序填空类型) 其中选择题只能进去做一次,一旦退出来则不可再进(注意!)。大题可以重复进入,重复做。 分值: 选择题一个四十道题四十分,一题一分 三道大题: 基础操作:18分 简单应用:24分 综合应用:18分 大题得

    2024年02月11日
    浏览(43)
  • 【NCRE 二级Java语言程序设计01】全国计算机等级考试初识

    📜 本专栏主要是分享自己备考全国计算机二级Java语言程序设计所学心得体会、所搜集的资料信息。虽然有 Java 语言相关基础,但是 Java 桌面编程、Applet 小程序编程根本没学过,因为咱不是搞这个的呀,学了它们也找不到这方面工作呀。但是对于考二级 Java 的小伙伴来说是必

    2024年02月10日
    浏览(45)
  • 全国计算机等级考试-Python

    一、 题型及分值分布1.      单选题共40道,1到10题为公共基础知识,11到40题是python相关的知识,比如数据结构与算法、python基础知识。 每道题1分,共40分;2.     基础编程题共3道,题目会给一部分写好的代码,描述它的作用,然后填补空缺处的代码,使程序能正常运行

    2024年02月07日
    浏览(43)
  • 【计算机二级Python】综合题目

    描述使用字典和列表型变量完成最有人气的明星的投票数据分析。投票信息由附件里的文件vote.txt给出, 一行只有一个明星姓名的投票才是有效票 。有效票中得票最多的明星当选最有人气的明星。 问题一:请统计 有效票张数 。在编程模板中补充代码完成程序。 像一行同时出现

    2024年02月07日
    浏览(48)
  • Python计算机二级大题

    键盘输入字符串s,按要求把s输出到屏幕,格式要求:宽度为30个字符,星号字符*填充,居中对齐。如果输入字符串超过30位,则全部输出。 例如:键盘输入字符串s为\\\"Congratulations”,屏幕输出*******Congratulations******* 解析: 这里使用了 Python 的字符串格式化功能。具体来说, \\\"{

    2024年02月05日
    浏览(62)
  • 二级考python和c语言哪个好,计算机二级python和c

    大家好,小编来为大家解答以下问题,二级python和二级c语言哪个更吃香一些,二级python和二级c语言哪个更吃香一点,今天让我们一起来看看吧!   计算机二级貌似只是在校园里的自嗨,出来工作后并没有觉得这个证书有什么用. 本人本科是测控与仪器专业,研究生方向图像

    2024年02月13日
    浏览(40)
  • Python计算机二级知识点整理

    1.  一个完整的二叉树包括根节点,左子树和右子树,不同的遍历方式的区别就是访问的顺序的不同,前序遍历是首先访问根节点然后再访问左子树和右子树,中序遍历是访问根节点在访问左子树和右子树之间,后序遍历是先访问左子树和右子树再访问根节点。 2.结构化程序

    2024年02月09日
    浏览(47)
  • 计算机二级Python基本操作题-序号45

    示例格式如下: 苹果 芒果 草莓 芒果 苹果 草莓 芒果 香蕉 芒果 草莓 统计各类型的数量,从数量多到少的顺序输出类型及对应数量,以英文冒号分隔,每个类型一行。输出结果保存在考生文件夹下,命名为“PY202.txt”。输出参考格式如下: 芒果:4 草莓:3 苹果:2 香蕉:1 示例格

    2024年02月14日
    浏览(50)
  • 计算机二级Python基本排序题-序号45(补充)

    A1-[‘12’,‘05’,‘07’,‘04’] A4-[‘23’,‘03’,‘11’] A3 -[‘12’,‘01’] A2-[‘07’] 输入: Bob 输出: Bob 234567891 1926 输入: bob 输出: 对不起,您输入的用户信息不存在。 pdict[name]返回的是键对应的值,即列表[‘xxx’] pdict[name][0]返回的是列表中的第一个元素,此时返回的是字符

    2024年01月21日
    浏览(57)
  • 计算机二级python选择题易错题3

    1、以下关于Python字符编码的描述中,正确的是() A、Python字符编码使用ASCII编码存储 B、chr(x)和ord(x)函数用于在单字符和Unicode编码值之间进行转换 C、print(chr(\\\'a\\\'))输出97 D、print(ord(65))输出A 正确答案:B 2、以下的函数定义中,错误的是()。 A、def vfunc(s,a

    2024年02月05日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包