凯撒密码加解密实现(python)

news/2024/11/8 0:40:14/

Caesar(凯撒密码)

原理

凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。例如,当偏移量是左移 3 的时候(解密时的密钥就是 3):

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:

明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ

例题

已知密文为vzsx,位移量为3,求明文?
解:第一步,写出密文中字母对应的位置(下标),比如说a在字母表中为第一位,就记作1(记作0也可以,最后一个字母z = 25)所以我们可以写出v = 22,z = 26,s = 19,x = 24第二步,因为位移量为3,所以我们将以上数字都减3,即19,23,16,21第三步,将以上数字还原为字母,19对应s,23对应w,16对应p,21对应u,我们就解出了明文swpu.

加解密脚本

from string import ascii_lettersdef encrypt(plaintext, key):if key < 0:raise Exceptionres = ''key = key % 26for s in plaintext:if s in ascii_letters in ascii_letters:if chr(ord(s) + key) in ascii_letters:res += ''.join(chr(ord(s) + key))else:res += ''.join(chr(ord(s) + key - 26))else:res += ''.join(s)return resdef decrypt(plaintext, key):if key < 0:raise Exceptionres = ''key = key % 26for s in plaintext:if s in ascii_letters in ascii_letters:if chr(ord(s) - key) in ascii_letters:res += ''.join(chr(ord(s) - key))else:res += ''.join(chr(ord(s) - key + 26))else:res += ''.join(s)return resdef attack(plaintext):for key in range(0, 27):res = ''for s in plaintext:if s in ascii_letters in ascii_letters:if chr(ord(s) - key) in ascii_letters:res += ''.join(chr(ord(s) - key))else:res += ''.join(chr(ord(s) - key + 26))else:res += ''.join(s)res = 'key为' + str(key) + '时:' + resprint(res)plaintext = 'QVVFWI{wklv_lv_d_whvw_iodj}'
attack(plaintext)

http://www.ppmy.cn/news/839568.html

相关文章

维吉尼亚密码加解密

西安电子科技大学Python程序设计上机实验——维吉尼亚密码加解密 维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法&#xff0c;属于多表密码的一种简单形式。为了生成密码&#xff0c;需要使用表格法。这一表格包括了 26 行字母表&#xff0c;每一行都由前一行向左…

加密解密

//加密解密 public class GF_Encrypt { /// <summary> /// DES加密 /// </summary> /// <param name"pToEncrypt">加密字符串</param> /// <param name"sKey">密钥</param> /// <returns></returns> publ…

仿射密码解密(Affine Cipher)

仿射密码是一种表单代换密码&#xff0c;字母表的每个字母相应的值使用一个简单的数学函数对应一个数值&#xff0c;再把对应数值转换成字母。 ABCDEFGHIJKLMNOPQRSTUVWXYZ012345678910111213141516171819202122232425 加密函数&#xff1a;E(x) (ax b) (mod m)&#xff0c…

古典密码----仿射密码加解密

理论部分 仿射密码是移位密码的一个推广&#xff0c;其加密过程不仅包含移位操作&#xff0c;而且使用了乘法运算。与移位密码相同&#xff0c;仿射密码的明文空间M和密文空间C均为Z26&#xff0c;因此&#xff0c;在使用仿射密码体制对英文消息进行加密之前&#xff0c;需要在…

密码加解密java语言实现

目录 前言 1.密码加密的主要方式 2.代码的实现过程 3.整体代码 前言 随着技术的发展&#xff0c;密码加密技术已经越来越普遍越来越多样化&#xff0c;在我们生活中常见的加密算法包括了DES加密算法,AES加密算法,RSA加密算法,MD5加密算法等等。密码加密在我们国家社会生活中…

数据库密码加解密

为符合数据安全&#xff0c;针对数据库密码进行加密以防止数据库密码明文展示而引发的安全隐患。 一、数据库密码加密&#xff1a; 加密Jar包&#xff1a; 数据库密码加密Jar包-Java文档类资源-CSDN下载 使用详解&#xff08;环境为JDK1.7&#xff09;&#xff1a; 1.通过…

密码学解密网站汇总

密码学解密网站汇总 0x00.综合 网站中包含大多编码的解码。http://web2hack.org/xssee/https://www.sojson.com/http://web.chacuo.net/ 0x01.文字倒序排列 http://www.qqxiuzi.cn/zh/daoxu/ 0x02.cmd5解密 http://www.cmd5.com/http://pmd5.com/http://tool.chinaz.com/Tools/…

密码的解密

题目描述 某网站为了安全起见&#xff0c;将用户的密码采用加密的形式存储。但是一旦用户忘记密码&#xff0c;需要解密程序还原用户的密码。&#xff08;1&#xff09;密码由8个英文字母组成。&#xff08;2&#xff09;解密规则为&#xff1a;①第1、4、7个字符的ASCII码1&a…