【加密算法】凯撒密码的原理及Python实现

简介: 凯撒密码的原理及Python实现

凯撒密码的介绍

凯撒密码是已知最早、最简单的密码之一。它是一种替换密码,在这种密码中,明文中的每个字母都被“移位”到字母表中一定数量的位置。例如,移动1,A会被B取代,B会变成C,以此类推。这种方法以朱利叶斯·凯撒(Julius Caesar)的名字命名。
假设我们移位的值是6,掰起指头算一下,那么a对应的就是gb对应hc对应i等等。

加密前:i love csdn
加密后:o rubk iyjt

这样加密后看起来就像是一串无意义的字符串。

原理

通常加密和解密互为逆过程,我们知道如何加密,那么解密的方法也就清晰了,对于凯撒密码,只要我们知道“移位”的值k,那么就能对密文进行解密。
简化问题,我们做如下假设:

  • 只考虑小写英文字母
  • 'a' = 0 'b' = 1 'c' = 2 ... 'z' = 25

其中,word代表被加密字母,encrypt()代表加密函数,k代表移位值,那么加密过程的数学公式为:

encrypt(word) = (word + k) mod 26

解密过程的数学公式为:

decrypt(word) = (word - k) mod 26

Python实现

ord()函数和chr()的介绍

我们要用到ord()chr()两个函数,先看下介绍。

chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。

az的编码为97-122.
ASCII码表请点击这里

Python加密

加密时,如果遇到空格,我们选择不加密。

s = input('请输入要加密的字符串:')
k = int(input('请输入移位值:'))
s_encrypt = ''
for word in s:
    if word == ' ':
        word_encrypt = ' '
    else:
        word_encrypt = chr((ord(word)-ord('a') + k) % 26 + ord('a'))
    s_encrypt += word_encrypt
print(s_encrypt)
请输入要加密的字符串:i love csdn
请输入移位值:6
o rubk iyjt

Python解密

s = input('请输入要解密的字符串:')
k = int(input('请输入移位值:'))
s_decrypt = ''
for word in s:
    if word == ' ':
        word_decrypt = ' '
    else:
        word_decrypt = chr((ord(word)-ord('a') - k) % 26 + ord('a'))
    s_decrypt += word_decrypt
print(s_decrypt)
请输入要解密的字符串:o rubk iyjt
请输入移位值:6
i love csdn

最近我在做算法题,包括Leecode和DMOJ等平台,水平还有限,有兴趣加个好友一起交流提高。

相关文章
|
1天前
|
监控 调度 开发者
Python 中的异步编程:理解 asyncio 库的基本原理与应用
本文将深入探讨 Python 中的异步编程技术,重点介绍 asyncio 库的基本原理与应用。通过解释事件循环、协程和 Future 对象的概念,读者将能够理解异步编程的工作原理,并学会如何利用 asyncio 库提高程序的性能和效率。本文还将通过实际示例演示如何使用 asyncio 库来处理 I/O 密集型任务和 CPU 密集型任务,以及如何避免常见的陷阱和错误。
|
1天前
|
调度 UED Python
Python 中的异步编程:理解 asyncio 库的基本原理与应用
本文探讨了 Python 中的异步编程,重点介绍了 asyncio 库的基本原理与应用。通过分析事件循环、协程以及异步/await 关键字的作用机制,读者将能够深入理解异步编程的工作方式,并学会如何利用 asyncio 库构建高效的异步应用程序。同时,本文还介绍了一些实际案例,帮助读者更好地掌握 asyncio 库的实际应用。
|
2天前
|
算法 搜索推荐 C语言
Python实现数据结构与算法
【5月更文挑战第13天】学习数据结构与算法能提升编程能力,解决复杂问题,助你面试成功。从选择资源(如《算法导论》、Coursera课程、LeetCode)到实践编码,逐步学习基本概念,通过Python实现栈、队列和快速排序。不断练习、理解原理,探索高级数据结构与算法,参与开源项目和算法竞赛,持续反思与实践,以提升技术能力。
6 0
|
2天前
|
机器学习/深度学习 算法 数据可视化
Python 数据结构和算法实用指南(四)(4)
Python 数据结构和算法实用指南(四)
10 1
|
2天前
|
机器学习/深度学习 存储 算法
Python 数据结构和算法实用指南(四)(3)
Python 数据结构和算法实用指南(四)
14 1
|
2天前
|
存储 算法 搜索推荐
Python 数据结构和算法实用指南(四)(2)
Python 数据结构和算法实用指南(四)
9 0
|
2天前
|
存储 算法 Serverless
Python 数据结构和算法实用指南(四)(1)
Python 数据结构和算法实用指南(四)
14 0
|
2天前
|
存储 算法 搜索推荐
Python 数据结构和算法实用指南(三)(4)
Python 数据结构和算法实用指南(三)
10 1
|
2天前
|
存储 搜索推荐 算法
Python 数据结构和算法实用指南(三)(3)
Python 数据结构和算法实用指南(三)
10 1
|
2天前
|
存储 算法 前端开发
Python 数据结构和算法实用指南(三)(2)
Python 数据结构和算法实用指南(三)
10 1