向C编程高手和数学高手求助!(请随意转贴/回复)

转载 2004年11月03日 19:58:00
向编程高手和数学高手求助!(请随意转贴/回复)

向编程高手和数学高手求助!(此贴请随意转贴)

小弟在德国念书,教授出了一道加解密题目,关于“Vigenère-Cipher”问题,即维琼内尔密码法,命题如下:

已知密文为“WGPKYKVRYTHHDXSL”,密钥长短和内容不知,知道明文包含字符“SIND”,选择合适的办法猜解出密钥。用C语言编写该程序。

(小弟问了同学,说可以用穷举法,如a,b,c...aa,ab,ac...aaa,aab,aac...等等一一尝试下去,可小弟c编程快忘光了,一时间也拣不起来了,所以请各位高人帮忙,写个程序,谢谢。)附上2则附录,有需要了解此加密机制和编程辅助的可以参看。

附录1:“维琼内尔密码法”的加密原理。
附录2:“维琼内尔密码法”的加密过程C语言程序,小弟改写的,经编译和验证正确。

****************************************************************

附录1:維瓊內爾密碼法是由多套的單套字母替代式密碼法所組成,讓我們先觀察下表,維瓊內爾最上面一行的小寫字母是明文字母,接著下面的是二十六套密碼字母,每套都是將它前套字母向後挪移一位。每個密匙字母都對應著與它同行的一行密文字母。每一行密文字母與最上面一行的明文字母就組成凱撒密碼的一張換字表,一共有26行密文字母,因此有26張換字表,它們分別代表“後移1位”、“後移2位”……“後移26”的凱撒密碼。

例如,現在要用HOUSE為鑰匙字,順序依著H、O、U、S、E去加密明文New Generation,得出的就是經維瓊內爾密碼法加密過的密文(詳參後表)。简而言之就是(明文+密钥)再与26求模=密文了。

鑰匙字 H O U S E H O U S E H O U 
明文     n e w g e n e  r  a t  i  o  n 
密碼文 U S Q Y I U S  L  S X P C H 

可以看出,在明文中,同樣是n,可同時被加密成U及H兩個字,而在密文中,同樣是S,卻分別代表著e及a兩個字。

這樣,便很大程度上消除了單套字母替代式密碼法面對頻率分析法的威脅,從而變得非常難以攻破,一直維持了三百多年。

它的数学模型是:

ZG = ZK + ZS mod 26
 
例如:
  
密钥: C  O  D  E  C O  D E  C  O  D E  C O   D E 
ZS  : 2  14 3  4  2 14 3  4 2  14 3 4  2 14  3 4 
明文: P  O  L  Y  A L  P  H  A B  E T  I  S  C H 
ZK  : 15 14 11 24 0 11 15 7  0 1  4 19 8  18 2 7 
ZG  : 17 2  14 2  2 25 18 11 2 15 7 23 10 6  5 11 
密文: R  C  O  C  C Z  S  L  C P  H X  K  G  F L 


20041131122053800.jpg

****************************************************************
附录2:加密过程的C程序

#include<stdio.h>

main()
{

  int  n=0,i=0,j=0,k=0;
  char word_s[27]="abcdefghijklmnopqrstuvwxyz",
         passwd[129],message[257];
  char *word=word_s,*p=passwd,*m=message;
  
  printf("cleartext    : ");
  scanf("%s",m);
  printf("Keyword     : ");
  scanf("%s",p);
  printf("codetext : ");

  while(p[n]!='/0')
  {
    n=n+1;
  }
  while(m[i]!='/0')
  {
    while(p[i%n]!=word[j])
    {
      j=j+1;
    }
    while(m[i]!=word[k])
    {
      k=k+1;
    }

    printf("%c",word[(j+k)%26]);
    i=i+1;
    j=0;
    k=0;

  }

  return 0;

}

编程高手成长的六个阶段(梁肇新《编程高手箴言》)

1.2.1 高手成长的六个阶段程序员怎样才能达到编程的最高境界?最高境界绝对不是你去编两行代码,或者是几分钟能写几行代码,或者是用什么所谓的可视化工具产生最少的代码这些工作,这都不是真正的高手境界。即...
  • famenwuliang
  • famenwuliang
  • 2011年07月15日 10:37
  • 1739

编程高手无捷径

想成为编程高手,想必是每个程序员的愿望。当你发现某个角落冒出个大牛时,除了深深的膜拜,只好自叹不如啊。话说1个优秀程序员能顶10个普通程序员,这让你更想成为人人敬仰的高手了。编程高手犹如武林高手一般,...
  • booirror
  • booirror
  • 2013年12月01日 13:37
  • 5613

向破解高手求助

本人有一套脚本是加密的,目前需要破解及反编译(需要源代码),该脚本应该是用perl语言编写,使用UltraEdit32软件编辑,但在编辑后作者直接加密生产可执行文件,知道的就这么多了,那位大侠有能力破...
  • cyc6868
  • cyc6868
  • 2009年12月24日 00:54
  • 38

向会C程序设计的高手求助

w); return 0;} y); if(m7||w7)w-=7; else w+=7; } printf("%d>/n" d m &d); printf("%d—%d—%d:
  • bugrnm
  • bugrnm
  • 2008年10月20日 09:17
  • 186

向高手致敬!!

  在这里发现了好多的好文章,很感谢高手们的赐教,本人属于笨鸟,只能先飞了,能不能提早入林,看以后的造化了。无愧于自己就好了!...
  • dlhsjshj
  • dlhsjshj
  • 2011年07月01日 15:35
  • 109

调试高手和编程高手

业界总是有高手之说,高手成了程序员心中之偶像,成了程序员成长之目标。但是,现实中人们往往对自己所了解的程序员,很难认同为高手;人们反而对那些自己不了解的,甚至是道听途说的人会认作为高手了。高手,同武林...
  • eom_n216
  • eom_n216
  • 2010年01月11日 09:00
  • 12590

《调试高手和编程高手》

业界总是有高手之说,高手成了程序员心中之偶像,成了程序员成长之目标。但是,现实中人们往往对自己所了解的程序员,很难认同为高手;人们反而对那些自己不了解的,甚至是道听途说的人会认作为高手了。高手,同武林...
  • ygyangguang
  • ygyangguang
  • 2010年01月07日 10:33
  • 202

想成为编程高手,从基础做起

       很多人想成为编程高手,但是常常他们太急功近利了,经常误入歧途。其实编程的路是不平坦的,你会遇到很多的困难。而这些困难很多情况下是需要你一个人解决的。所有你需要一个准备。当然,我的话可能说...
  • feixiaoxing
  • feixiaoxing
  • 2008年06月07日 20:43
  • 16945

一段求助的情景对话

This is from xx Hub. I have raised a ticket which number is XXXXXXX, please see the description and ...
  • catvi
  • catvi
  • 2010年12月09日 16:36
  • 421

安卓4.4以上版本的Emoji

Android 手机在API19以上(包括19 即安卓4.4版本)开始全面兼容Emoji 但是兼容的Emoji个数有限 现在把所有的Emoji 列出来 方便大家使用 项目传到GitHub 上了 方便查...
  • Jason_HD
  • Jason_HD
  • 2018年01月08日 12:44
  • 189
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:向C编程高手和数学高手求助!(请随意转贴/回复)
举报原因:
原因补充:

(最多只允许输入30个字)