凯撒密码

原理:
通过把字母移动一定的位数来实现加解密

明文中的所有字母从字母表向后(或向前)按照一个固定步长进行偏移后被替换成密文。

例如:
当步长为3时,A被替换成D,B被替换成E,依此类推,X替换成A。

在密码学中,用于解决复杂问题的步骤,称为一种算法
加密算法: 从明文到密文的过程
解密算法: 从密文到明文的过程
二者合称为密码算法。

密码算法+密钥构成了数据加密和解密

对称加密: 在加密和解密的过程中使用相同密钥的算法,例如:凯撒密码
非对称密码(公钥加密算法):加密和解密使用不同密钥的算法,例如:RSA

Python来实现凯撒密码

ord() :将字符转换为了对应的 ASCII 值
chr(): 将对应的值转换为字符
取模运算: 将一个数整除另一个数得到的余数,余数即模运算的值

# -*- coding: utf-8 -*-# @Date    : 2018-10-12
# @Author  : Peng Shiyuclass CaesarCipher(object):"""凯撒加密解密"""def __crypt(self, char, key):"""对单个字母加密,偏移@param char: {str} 单个字符@param key: {num} 偏移量@return: {str} 加密后的字符"""if not char.isalpha():return charelse:base = "A" if char.isupper() else "a"return chr((ord(char) - ord(base) + key) % 26 + ord(base))def encrypt(self, char, key):"""对字符加密"""return self.__crypt(char, key)def decrypt(self, char, key):"""对字符解密"""return self.__crypt(char, -key)def __crypt_text(self, func, text, key):"""对文本加密@param char: {str} 文本@param key: {num} 偏移量@return: {str} 加密后的文本"""lines = []for line in text.split("\n"):words = []for word in line.split(" "):chars = []for char in word:chars.append(func(char, key))words.append("".join(chars))lines.append(" ".join(words))return "\n".join(lines)def encrypt_text(self, text, key):"""对文本加密"""return self.__crypt_text(self.encrypt, text, key)def decrypt_text(self, text, key):"""对文本解密"""return self.__crypt_text(self.decrypt, text, key)if __name__ == '__main__':plain = """you know? I love you!"""key = 3cipher = CaesarCipher()# 加密print(cipher.encrypt_text(plain, key))# brx nqrz? L oryh brx!# 解密print(cipher.decrypt_text("brx nqrz? L oryh brx!", key))# you know? I love you!

详细参考:
Hacking- Python之禅

Python编程:实现凯撒密码加密解密相关推荐

  1. 凯撒密码加密解密C语言详细代码

    凯撒密码加密解密C语言详细代码 凯撒密码 又叫循环移位密码.它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代.它的加密过程可以表示为下面的函数: E(m)=(m+k) mod ...

  2. 凯撒密码加密解密——Java代码(密码学)

    凯撒密码加密解密--Java代码(密码学) 凯撒密码: 恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文 ...

  3. C++凯撒密码加密解密算法

    一.算法描述 凯撒密码的加密解密算法,逻辑很简单,就是两个公式: 比如说下面这个例子的加密解密公式,就是位移量为3时的结果 加密公式 f(a)=(a+3) mod 26 解密公式 f(a)=(a+23 ...

  4. Matlab凯撒密码加密解密

    Pratice problem: Bob wants to send the message "Start sending messages at 8:30" to Alice i ...

  5. 2.凯撒密码加密解密(C)

    明文空间M.密文空间C都是和密钥空间K满足,M=C=K={0,1,2,-,25}=Z_26 ,即把26个英文字母与整数0,1,2,-,25一一对应. 加密变换,E={E:Z26→Z26, Ek (m) ...

  6. C++实现古典密码-凯撒密码加密解密算法

    文章目录 第一部分 Caesar密码简介 1.1 基本思想 1.2 历史沿革 第二部分 Caesar密码的C++实现 第一部分 Caesar密码简介 1.1 基本思想 在密码学中,恺撒密码(英语:Ca ...

  7. 5.3使用凯撒密码加密和解密英文文件python

    1本关任务:使用凯撒密码加密和解密英文文件.具体要求如下: (1)接收一个字符串为参数,如果参数值为加密,要求用户输入一个要加密的文件名,再输入一个单词做为密钥发生器,用于计算偏移量,对文件中的内容进 ...

  8. python凯撒密码加密写入文件_Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作...

    #-*- coding: gb2312 -*-#用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作#作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/k ...

  9. 凯撒密码加密、解密、暴力破解(C语言实现)

    C语言设计,替换密码开发设计,2022年9月信息安全课程作业分享 #include<stdio.h> #include<string.h> #include<stdlib ...

最新文章

  1. 用vue-cli脚手架搭建一个仿网易云音乐的全家桶vue项目
  2. 100万奖金池,这不仅仅是场比赛
  3. Linux邻居子系统的细节之confirm-Open××× server模式的MAC地址学习
  4. 计算程序运行时间(.net1.1 于.net2.0的区别)在.net2.0中提供了Stopwatch类,简单例子...
  5. Even Substrings
  6. android 手势事件 重写,Android实现通过手势控制图片大小缩放的方法
  7. Table 表格导出功能
  8. 数据类型之数字类型—运算符
  9. 【李宏毅2020 ML/DL】P82 Generative Adversarial Network | Improving Sequence Generation by GAN
  10. h5盲盒商城源码 修复版 附带详细教程
  11. BZOJ---4484:[Jsoi2015]最小表示【bitset】
  12. 什么是网络智能运维?如何保障业务7x24小时在线?
  13. rt2870 linux,『求助』RaLink雷凌RT2870 无线网卡怎样安装驱动?
  14. 重装、删除、卸载ArcGIS的注意的事项
  15. Jpetstore——使用AJAX和jQuery改善用户体验1(账号管理模块)
  16. 分享几个好看的Bootstrap后台管理响应式模板
  17. 你知道公司做哪个体系的认证更适合吗?
  18. MySql安装Muti
  19. 分析了解JDK1.8版本的Java集合HashMap的put()方法
  20. 微信H5支付实战踩坑

热门文章

  1. 层次模型,网状模型,关系模型
  2. 英雄榜再添豪杰!分享喜悦与荣誉
  3. VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句
  4. 在VisualStudio中使用EF操作Firebird数据库
  5. OpenStreetMap数据Qt5分析实战(基于2020数据)
  6. Nginx面试题(史上最全 + 持续更新)
  7. 海明码java编程,海明码校验程序设计
  8. Java Hutool 汉字转拼音码
  9. 访问网站时,长时间打不开或无响应
  10. 由浅入深,66条JavaScript面试知识点