登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
  立华软件园 - 安全技术中心 - 技术文档 - 黑客编程 技术文章 | 相关下载 | 电子图书 | 攻防录像 | 安全网站 | 在线论坛 | QQ群组 | 搜索   
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
 其他安全技术资源
  · 攻防演示动画
  · 电子图书
  · QQ群组讨论区
  · 其他网站资源
最新招聘信息

凯撒密文的破解编程实现
发表日期:2004-09-19作者:saibinhe[转贴] 出处:安全焦点  

凯撒密文的破解编程实现
  近来安全的发展,对密码学的研究越来越重要,虽然我们现在大多采用的是
非对称密码体制,但是同时由于处理及其它的一些重要原因,对传统密码仍然
是在大量的使用,如移位,替代的基本思想仍然没有改变,我个人认为,将来
的很长时间内,我们必将会花大量的时间对密码学进行研究,从而才能促进我
们的电子政务,电子商务的健康发展,下面我要谈的是对一个古典密码-----
凯撒(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[i] = 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.txt\n");
}                                         //判断程序输入参数是否正确


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[i]>temp)
     {
         j=i;                               // 求出最大次数的下下标
         temp=num[i];      
     }
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);
}

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 凯撒密文的破解编程实现

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00179