凯撒密文的破解编程实现

凯撒密文的破解编程实现
近来安全的发展,对密码学的研究越来越重要,虽然我们现在大多采用的是
非对称密码体制,但是同时由于处理及其它的一些重要原因,对传统密码仍然
是在大量的使用,如移位,替代的基本思想仍然没有改变,我个人认为,将来
的很长时间内,我们必将会花大量的时间对密码学进行研究,从而才能促进我
们的电子政务,电子商务的健康发展,下面我要谈的是对一个古典密码-----
凯撒(kaiser)密码的的解密,也就是找出它的加密密钥,从而进行解密,由于
它是一种对称密码体制,加解密的密钥是一样的,下边简单说明一下加解密
加密过程:
密文:C=M+K (mod 26)
解密过程:
明文:M=C-K (mod 26)
详细过程请参考相关资料
破解时主要利用了概率统计的特性,E字母出现的概率最大。

加密的程序实现我就不说了,
下面重点说一下解密的程序实现:我是用C写的,在VC6.0下调试运行正确

#include"stdio.h"
#include"ctype.h"
#include"stdlib.h"

main(int argc ,char *argv[])
{

FILE *fp_ciper,*fp_plain; //密文与明文的文件指针
char ch_ciper,ch_plain;
int i,temp=0; //i用来存最多次数的下标
//temp用在求最多次数时用
int key; //密钥
int j;
int num[26]; //保存密文中字母出现次数

for(i = 0;i < 26; i++)
num = 0; //进行对num[]数组的初始化

printf("======================================================n");
printf("------------------BY 安美洪 design--------------------n");
printf("======================================================n");

if(argc!=3)
{
printf("此为KAISER解密用法:[文件名] [密文路径] [明文路径]n");
printf("如:decryption F:ciper_2_1.txt F:plain.txtn");
} //判断程序输入参数是否正确

if((fp_ciper=fopen(argv[1],"r"))==NULL)
{
printf("打开密文出错!解密失败n");
exit(0);
}
while((ch_ciper=fgetc(fp_ciper))!=EOF)
switch(ch_ciper)
{
case 'A':num[0]=num[0]+1; break; //统计密文各字母出现次数
case 'B':num[1]=num[1]+1; break; //与上同,下边一样
case 'C':num[2]=num[2]+1; break;
case 'D':num[3]=num[3]+1; break;
case 'E':num[4]=num[4]+1; break;
case 'F':num[5]=num[5]+1; break;
case 'G':num[6]=num[6]+1; break;
case 'H':num[7]=num[7]+1; break;
case 'I':num[8]=num[8]+1; break;
case 'J':num[9]=num[9]+1; break;
case 'K':num[10]=num[10]+1;break;
case 'L':num[11]=num[11]+1;break;
case 'M':num[12]=num[12]+1;break;
case 'N':num[13]=num[13]+1;break;
case '0':num[14]=num[14]+1;break;
case 'P':num[15]=num[15]+1;break;
case 'Q':num[16]=num[16]+1;break;
case 'R':num[17]=num[17]+1;break;
case 'S':num[18]=num[18]+1;break;
case 'T':num[19]=num[19]+1;break;
case 'U':num[20]=num[20]+1;break;
case 'V':num[21]=num[21]+1;break;
case 'W':num[22]=num[22]+1;break;
case 'X':num[23]=num[23]+1;break;
case 'Y':num[24]=num[24]+1;break;
case 'Z':num[25]=num[25]+1;break;

}
fclose(fp_ciper);

for(i=0;i<26;i++)
if(num>temp)
{
j=i; // 求出最大次数的下下标
temp=num;
}
if(j<5)
key=(j+1+26)-5; //是按字母表的第几位计算
//而不是按下标,故加1
//5是指E在字母表中的位序
else
key=(j+1)-5;

if((fp_ciper=fopen(argv[1],"r"))==NULL)
{
printf("再次打开密文出错!解密失败n");
exit(0);
} //再次打开密文,进行解密
if((fp_plain=fopen(argv[2],"w"))==NULL)
{
printf("打开或建立明文文件出错!解密失败n");
exit(0);
} //把明文存到此文件
while((ch_ciper=fgetc(fp_ciper))!=EOF)
{
if(ch_ciper > 'E')
ch_plain=(((ch_ciper-'A'-key)%26)+'A'); //解密
else
ch_plain=(((ch_ciper-'A'-key+26)%26)+'A'); //解密
ch_plain=tolower(ch_plain); //把大写明文转化为小写
fputc(ch_plain,fp_plain); //把明文写到文件文件plain
}
fclose(fp_ciper);
fclose(fp_plain);
printf("解密成功,密钥KEY=%d,明文已保存到文件中,谢谢使用!n",key);
}

凯撒密文的破解编程实相关推荐

  1. 3.暴力破解凯撒密码

    没有什么可以阻止密码破译者猜测一个密钥,然后用这个密钥解密密文,查看输出,如果该密钥不是正确的密钥就继续尝试下一个密钥.这种每一个可能的解密密钥的技术叫暴力破解. # 凯撒密码暴力破解 message ...

  2. 凯撒密码的加密,破解,以及暴力破解法

    凯撒密码的加密 #include <stdio.h>int main() { char a[80],b[80];//a为原码,b为加密 int i,k; scanf("%d&qu ...

  3. 【每日一题】| (古典加密)凯撒密码(一)简单的凯撒加密

    文章目录 前言 一.凯撒加密是什么 举个例子 扩展:ROT-13(回转13位) 二.密码破解 总结 前言 今天的每日一题,由我向来大家来介绍预备知识.今天就跟大家聊一聊CTF密码学中古典加密的经典加密 ...

  4. 凯撒密码c语言小写字母,凯撒密码c(c语言编程凯撒密码)

    凯撒密码c(c语言编程凯撒密码) 2020-05-15 13:09:51 共10个回答 #include#includeintmain(){charsave[10][30];inta,b,i,j;sc ...

  5. Python暴力破解凯撒加密的文本

    凯撒加密是一种经典加密算法,把文本中的每个英文字母替换为字母表中后面第k个字母.该加密算法的抗攻击能力比较弱,因为密钥(也就是k)的取值范围是固定的,很容易暴力破解.当然,也可以利用英文的统计特性(例 ...

  6. Java加密算法—凯撒加密实现以及暴力破解

    目录 1.概念 2.加密实现 3.解密实现 4.频率分析法破解 1.概念 凯撒密码最早由古罗马军事统帅盖乌斯·尤利乌斯·凯撒在军队中用来传递加密信息,故称凯撒密码.这是一种位移加密方式,只对26个字母 ...

  7. 凯撒密码的自动化破解方法(适用于英文文本)

    凯撒密码的自动化破解方法(适用于英文文本) 凯撒密码 凯撒加密是有记载的最古老的加密方法.原始的凯撒密码没有密钥,加密方式很原始,就是通过将字母表循环右移三位进行加密:a被D替代,b被E替代,-,x被 ...

  8. 【密码学】基于英文字母自然统计规律破解凯撒算法加密

    1. 前言 凯撒密码是一种古老的加密算法,至今也被应用在某些加密算法的过程中.一般而言,破解凯撒密码需要密钥,但是由于加密空间太小,解密可以穷举进行.因此本文给出了一种基于统计的解密算法,这种算法思想 ...

  9. 加密算法(一):30行代码破解凯撒加密

    密码学的英语单词是 Cryptograghy,由希腊单词 Kryptos(隐藏)和 Graphin (写)派生出来,最初代表的意思是用来隐秘的传递信息. 以时间划分,1976年以前的密码算法都属于 古 ...

最新文章

  1. OMS SDK中OPhone应用与BAE JIL中Widget应用的区别
  2. java awt canvas_JavaFX AWT Canvas
  3. python自动化测试视频百度云-Python接口自动化测试 PDF 超清版
  4. android+mysql+server+error_Lost connection to MySQL server during query错误 | 学步园
  5. ddm模型公式_简单判断目前行情——从股利贴现模型切入
  6. Linux日常运维管理技巧(二)Linux防火墙:你可以ping别人,别人ping不了你、转发、代理
  7. 数据库常用的锁有哪些?
  8. c语言的递归定义有两个要素,C语言-chap8function.ppt
  9. python爬虫步骤-Python爬虫的步骤和工具
  10. javaSE(java基础库)私人学习笔记
  11. c语言闰年题目程序,浙大版《C语言程序设计(第3版)》题目集 练习3-5 输出闰年...
  12. flowable工作流_使用Bash Shell实现flowable配置文件修改定制
  13. Premiere Pro 2020 安装教程
  14. POJ 3047 Bovine Birthday 日期定周求 泽勒公式
  15. python 吉他_Python中用于比较吉他弦的Matplotlib幅值_频谱单位
  16. 程序流程图 分别用N-S图和PAD图、伪码表示。n阶乘(软件工程)
  17. android图片:多选相册的实现
  18. 艾默生手操器TREXLFPNAWS1S
  19. 移动魔百和系统升级服务器地址,中国移动魔百盒网络连接图文教程
  20. layui弹层同时弹出多个

热门文章

  1. 自然语言处理基于java实现(4) 之 基于VSM模型的信息检索程序
  2. echop二次开发——电子票
  3. CentOS7 CPU 降频问题
  4. 【python】使用tkinter实现计算器程序
  5. 练习-Java类和对象之类的声明之复数运算
  6. 音频卡拉OK,TYPEC声卡芯片
  7. loadrunner录制IE11脚本并发有兼容性问题的解决方法
  8. m4a音频怎么转换成mp3?
  9. 中兴H608B和IPTV
  10. 鲍尔默加入Linux基金会