凯撒公式也称凯撒移位,是最简单的加密方法之一,相传是古罗马恺撒大帝用来保护重要军情的加密系统,它是一种替代密码。
加密公式
密文 = (明文 + 位移数) Mod 26
解密公式
明文 = (密文 - 位移数) Mod 26
凯撒加密法的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
凯撒加密法的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为:
En(x)=(x+n)mod26{\displaystyle E_{n}(x)=(x+n)\mod 26}
解密就是:
Dn(x)=(x−n)mod26{\displaystyle D_{n}(x)=(x-n)\mod 26}
直接把每个字母往后推三位
出来的就是密文了
即
明文:COMPUTERSYSTEM
密文:FRPSXWHUVBVWHP
而解密时 只需要把密文每个字母前推3位(推三位这是标准的凯撒密码 加密时不一定推三位 这时只要统计各字母出现的频率便很容易解开)
这应该是个加密算法的题吧??
y=x+k(MOD 26)这个叫做恺撒密码。
凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。
凯撒密码(移位密码):公式Y=(X+k)(mod 26):X是原码字母在字母表中的位置,Y是码文在字母表中的位置,k是位移量,也就是密钥。
所以,你只要给我k,我就能给你将这段字母解密了。
我宣布,已经破解了这段密码。答案就是 irememberyourloveliness
i remember your loveliness 我记得你的可爱。
上面公式中的k应该是k=7,解密的时候,再拿对应字母减去7.
比如P,P往前7个字母是i, 如果不够减,就加26再减。
根据苏维托尼乌斯的记载,恺撒曾用此方法对重要的军事信息进行加密: 如果需要保密,信中便用暗号,也即是改变字母顺序,使局外人无法组成一个单词。如果想要读懂和理解它们的意思,得用第4个字母置换第一个字母,即以D代A,余此类推。
同样,奥古斯都也使用过类似方式,只不过他是把字母向右移动一位,而且末尾不折回。每当他用密语写作时,他都用B代表A,C代表B,其余的字母也依同样的规则;用A代表Z。
扩展资料:
密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。因据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。这是一种简单的加密方法,这种密码的密度是很低的,只需简单地统计字频就可以破译。 现今又叫“移位密码”,只不过移动的为数不一定是3位而已。
参考资料来源:百度百科-凯撒密码
凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 2 位,则 字母 A 将变为 C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则变为 A,字母 Z 变为 B。
因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文: “Jgnnq” 。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位 变为“Hello” 。这里,移动的位数“2”是加密和解密所用的密钥。
该程序既可用于加密又可用于解密。只要传入明文和偏移量即可加密,解密需要传入密文和负的偏移量就可以解密。
输出的结果:
凯撒密码由于加解密比较简单,密钥总共只有 26 个,攻击者得到密文后即使不知道密钥,也可一个一个地试过去,最多试 26 次就可以得到明文。
这里不光根据 offset 偏移进行加密,还加上了字符所在的下标进行混合加密。
输出的结果: