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

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
 内容搜索 网页 下载 源代码
热点文章
  利用鼠标键盘钩子截获密码
  利用鼠标键盘钩子截获密码
  如何将多个文件捆绑成一个可..
  如何将多个文件捆绑成一个可..
  内核级HOOK的几种实现与应用
  内核级HOOK的几种实现与应用
  书写基于内核的linux键盘纪录..
  书写基于内核的linux键盘纪录..
  CIH病毒原码
  CIH病毒原码
  编写进程/线程监视器
  编写进程/线程监视器
本站原创
  利用鼠标键盘钩子截获密码
  利用鼠标键盘钩子截获密码
最新招聘信息

您现在的位置:立华软件园->安全防线->黑客编程
凯撒密文的破解编程实现
发表日期: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-2003 Allrights reserved
e_mail:站长:webmaster(at)lihuasoft.net
网站编程QQ群  
京ICP备05001064号

页面生成时间:0.0047