前言
本内容为博主学习凯撒密码的笔记,如有错误,烦请指正。
一、凯撒密码简介
凯撒密码是最早的代换密码,使用单表代换。其基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。位数就是凯撒密码加密和解密的密钥。
例子如下:
二、凯撒密码算法
1.加密算法
对于某一明文字母m来说,假设其ASCII码为x,往后移了i位,则新得到的密文c的ASCII码为x + i,考虑加密为26个字母周期性加密,则需将ASCII码对26取模,举例小写字母如下:
c = (m - 'a' + i) % 26 + 'a';
2.解密算法
同理,解密算法也是一个意思,对于某一密文字母m来说,假设其ASCII码为x,往前移了i位,则新得到的密文c的ASCII码为x - i,考虑加密为26个字母周期性加密,则需将ASCII码对26取模,再考虑到且(x-i)可能为负数,取’z’进行计算,举例小写字母如下:
m = (c - 'z' - i) % 26 + 'z';
三、代码实现
下面代码实现对移位为i的凯撒密码加密算法,只对字母有效,区分大小写。
#include <stdio.h>
void main(){
char plaintext[100],ciphertext[100];
char m;
int i,k,j=0;
while(1)
{
printf(