古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。

1. 替代密码

替代密码的原理是使用替代法进行加密,就是将明文由其它的字母、数字或符合所代替后形成密文。这里每个明文字母对应的密文字母可能是一个,也可能是多个。接收者对密文进行逆向替换即可得到明文。替代密码有五种表现形式:

1单表代替

即简单替代密码或者称为单字母代替,明文字母表中的一个字符对应密文字母表中的一个字符。这是所有加密中最简单的方法。

2多名码代替

就是将明文字母表中的字符映射为密文字母表中的多个字符。多名码简单代替早在1401年就由DuchyMantua公司使用。在英文中,元音字母出现频率最高,降低对应密文字母出现频率的一种方法就是使用多名码,如e可能被密文5、13或25替代。

3多音码代替

就是将多个明文字符代替为一个密文字符。比如将字母“i” 和“j”对应为“K”,“v”和“w”代替为“L”最古老的这种多字母加密始见于1563年由波他的《密写评价》(De furtiois literarum notis)一书。

4多表代替

即由多个简单代替组成,也就是使用了两个或两个以上的代替表。比如使用有5个简单代替表的代替密码,明文的第一个字母用第一个代替表,第二个字母用第二个表,第三个字母用第三个表,以此类推,循环使用这五张代替表。多表代替密码由莱昂.巴蒂斯塔于1568年发明,著名的维吉尼亚密码和博福特密码均是多表代替密码。

下面我们介绍一种典型的单表替代密码——凯撒(Caesar)密码,又叫循环移位密码。它的加密方法就是将明文中的每个字母用字母表中该字母后的第R个字母来替换,达到加密的目的。它的加密过程可以表示为下面的函数:

其中,m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥; 为密文字母在字母表中对应的位置数。

例如:对于明文字母H,其在字母表中的位置数为8,设,则按照上式计算出来的密文为L,计算过程如下:

代码为:

#include <iostream>
using namespace std;
# define N 26
int searchnum(char t){char r;char str[26];for(int i=1,r='A';i<=N;i++,r++){str[i]=r;}for(int i=1;i<=N;i++){if(t==str[i])return i;}}
char searchchar(int t)
{char r;char str[26];for(int i=1,r='A';i<=N;i++,r++){str[i]=r;}for(int i=1;i<=N;i++){if(t==i)return str[i];}
}
void jiami()
{char str[50];int k;cout<<"请输入您的密钥:"<<endl;//int m;//char s;cin>>k;cout<<"请输入您的明文:"<<endl;cin>>str;for(int i=0;str[i]!='\0';i++){int a,b;char ch=str[i];int m=searchnum(ch);a=m+k;b=a%26;char c=searchchar(b);str[i]=c;}cout<<"您的密文是:"<<endl;for(int i=0;str[i]!='\0';i++){cout<<str[i];}
}
void jiemi()
{char str[50];int k;cout<<"请输入您的密钥:"<<endl;//int m;//char s;cin>>k;cout<<"请输入您的密文:"<<endl;cin>>str;for(int i=0;str[i]!='\0';i++){int a,b;char ch=str[i];int m=searchnum(ch);if(m<k){a=m+N-k;b=a%N;}else if(m>k){a=m-k;b=a%N;}else{b=N;}char c=searchchar(b);str[i]=c;}cout<<"您的明文是:"<<endl;for(int i=0;str[i]!='\0';i++){cout<<str[i];}
}
int main()
{int choice;cout<<"请输入您的选择:"<<endl;cout<<"1.加密;2.解密;"<<endl;cin>>choice;switch (choice){case 1:jiami();break;case 2:jiemi();break;default:break;}// cout << searchnum(s)<< endl;return 0;
}

实现加密与解密

古典密码算法 凯撒(Caesar)密码,又叫循环移位密码相关推荐

  1. 古典密码算法(凯撒密码,矩阵换位密码) python实现

    古典密码算法 python实现 通过编程实现替代密码和置换密码算法,在这里通过python实现了对凯撒密码的加密与解密,以及对矩阵换位密码的加密与解密. 凯撒密码的相关算法是O(n)O(n)O(n)的 ...

  2. 【Java代码】古典密码算法——凯撒密码(CaesarCipher)

    贴代码记录一下,也欢迎学习参考~ 一.算法背景 · 替代密码        替代密码算法的原理是使用替代法进行加密,就是对明文中的字符用其他字符替代后形成密文.例如,明文字母a, b, c, d, 用 ...

  3. python中凯撒密码_python实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin* ...

  4. 有趣的密码学介绍~古典密码之凯撒密码来咯~

    游说万乘苦不早,著鞭跨马涉远道.仰天大笑出门去,我辈岂是蓬蒿人! 文章目录 前言 正文 古典密码 一.古典密码概述介绍 1.置换密码 2.代换密码 二.古典密码分类介绍 1.置换密码 2.编辑本段代换 ...

  5. 凯撒加密的python语言程序_python实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin* ...

  6. python实现凯撒密码、凯撒加解密算法

    python实现凯撒密码.凯撒加解密算法 更多python视频教程请到菜鸟教程https://www.piaodoo.com/ 凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字 ...

  7. c语言caesar密码编程,C语言程序设计#凯撒Caesar密码

    #include #include//颜色 using namespace std; int jiami(); int jiemi(); int main() { printf("***** ...

  8. python密码学凯撒密码_凯撒密码在Python

    python密码学凯撒密码 Hello everyone, in this tutorial you'll learn about Caesar cipher in Python. If you ha ...

  9. 历史著名密码(凯撒密码、简单替换密码、Enigma)

    凯撒密码 公元前100多年凯撒发明的一种密码,简单来说是平移密码,也就是将字母位置向后移动一定位数. 如原文是ABCDEFG,密钥为3,加密后就是DEFGHIJ. 以密钥的数字向后平移了三位,如果密钥 ...

最新文章

  1. 冒号课堂§2.4:并发范式
  2. FATE 集群部署 step2
  3. 请写出sfr和sbit的语句格式_最新最全 Oracle ORA-01861: 文字与格式字符串不匹配
  4. 使用NumPy优于Python列表的优势
  5. 2019最新Python爬虫高频率面试题总结(一)
  6. Python编程基础14:数据库编程
  7. 倒计时小工具_想要工作效率更高?这几款计时工具你一定不能错过!
  8. 太阳直射点纬度计算公式_高中地理,常用计算公式大盘点,高中满分特辑!
  9. 游戏中基于物理的渲染(一)
  10. 数字高程模型和地图——thematicmapping.org译文(一)
  11. sudo su 和sudo -s的区别
  12. Urllib库的基本使用
  13. Python进阶-----类的内置方法__getattribute__
  14. 项目管理五大过程组及其详细解释
  15. The7主题汉化版-V7.7.0 云典讲堂Wordpress网站模板可视拖拽编辑
  16. MC9S12XE 启动过程
  17. 2022化工自动化控制仪表考试试题及模拟考试
  18. Android应用开发自定义图片剪辑头像设置
  19. 周浩正:写给编辑人的信 编务报告书 一个实例
  20. 皱纹检测Wrinkle-detection

热门文章

  1. Mac M1 安装Maven
  2. Matlab矩阵和数组的操作
  3. HTTP 500 - Internal Server Error 服务器内部错误
  4. 为Visual studio 2008 添加汇编工程模板(原创)
  5. Electron 主进程、渲染进程及进程间的通信
  6. PostgreSQL设置字段默认值汇总(包含varchar,int,bool,时间,主键自增)
  7. 安装测试包(.ipa)到iPhone手机
  8. 大数据时代,做大数据开发要学Java框架吗?
  9. 华擎j3455装服务器系统,华擎J3455M主板u盘重装系统win8教程
  10. Thinkphp6 对接google谷歌第三方登录接口