主页 PC知识 网管技术 黑客帝国 安全技术 开放系统 程序设计 搜索 技术论坛

 

相关联接
 
RHU本级分类

新手入门
入侵实例
工具使用
安全防范
黑客人物
软件破解
漏洞研究

 
RHU阅读排行
·直面"拿来主义"—浅谈共享软件的破解方法
·《疯狂单词》“中级”教程
·ACCESS密码查看器算法分析[简单]
·goldeneye使用教程
·网络验证——Nok2Phone V3.41 (VB)(算法分析)
·软件狗[Dongles]的加密与解密技术
·加密算法之BLOWFISH算法
·新版aspr脱壳方法(完全版)
·凯撒密文的破解编程实现
·逆向追踪+模拟跟踪方法寻找暗桩 解除脱UPX后的校验

 
 
RHU最新文章
·Tray.Commander.v2.3 注册算法分析
·带壳分析易语言+简单浮点算法
·WinKawaks 1.45脱壳笔记
·破解高手常用的破解工具介绍
·用内存注册机方式破解X-NetStat
·<好帮手进销存>算法分析
·解密宝典——十招教你学会软件破解
·对付自校验的杀手锏 -- 偷天换日
·简单分析"冰狐浪子下载运行512生成器
·脱壳高级篇之认识Import表

 
 
RHU相关搜索









 
 
RHU广而告之

 
 
>您的位置:首页 -> 黑客帝国-> 软件破解
凯撒密文的破解编程实现

作者:RHU-TAC编辑员 来自:RHU-TAC编辑搜集 时间:2005-2-27 双击滚屏 收藏本页 字体:


点击 查看RHU2004全年文章


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

OVER

[1] 页 RedHyphone.Union 投稿邮箱
[特别声明]:
本站文章大多搜索转载自网络中,如果侵犯了您的权利,请告之我们。本站将立即删除。
本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
查看评论】【向上滚屏】【关闭窗口】【 打印
-相关文章
  • 提升权限终极技巧
  • 格式化字符串攻击笔记
  • 入侵win98系统(主机设有共享盘)的几个方法
  • 黑客破解口令常用的三种方法
  • 从一个简单破解中浅谈破解的思路
  • -文章评论 (关闭)
    ·还没有相关的评论!

    网上大名:
    红旋风网络技术联盟 RHUTech.Union
     
    Copyright © 2000-2007 RedHyphone.Union All Rights Reserved. 红旋风联盟版权所有.皖ICP备05011033号
    中国红旋风网络技术联盟 | www.RedHyphone.net
    Mailto:Redhyphone@gamil.com