c语言算法密码破译,求“维琼内尔密码法”的解密算法及程序,内详:

求“维琼内尔密码法”的解密算法及程序,内详:

小弟在德国念书,教授出了一道加解密题目,关于“Vigenère-Cipher”问题,即维琼内尔密码法,用C语言编写相关内容。

命题:已知密文为“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

jpg.gif此主题相关图片如下:

2004113148132.jpg

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

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

#include

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值