第三代加密法--维吉尼亚加密法

第三代加密法--维吉尼亚加密法,第1张

        加密法的需求在军事上及政治上的显现极为旺盛,也迫使它快速地向前发展。传统的移位及替代法虽然使用方便,但可以采用统计的方式进行破解,安全性还有待加强。

        所以后期就发展出一种新的加密方法,即维吉尼亚加密法。这种方法的出发点是,对于相同的字母或数字,加密后的密文可能不同,这就没法从统计的角度解密。

        基本的加密方法,可以参考下图。

        这张图中, 第一行代表原文的数字或字符,每一列代表加密采用第几套替代方案,每一横行的字符对应该列的字母加密后的密文 。是不是够复杂哈,如果采用这样的方式手工加密解密,写一封邮件估计要崩溃死了。。。。

        而且这套加密方法使用中还存在一些问题,就是需要把 整个加密图传给解密方 ,没有该图做指导,解密的人也是一脸懵逼。。。。

        但方法是死的,人是活的,人最可贵的一点就是遇到问题会想各种解决方法。所以这个问题如何解呢?关键在于一个密钥(key),比如以“yes”为密钥,加密时第一个字母采用"y"(即第25套替代方案)加密,将原文字母向后移动25位;第二个字母采用“e”(即第5套方案)加密,将原文字母向后移动5位;第三个字母采用"s"(即第19套方案)加密,将原文字母向后移动19位;依次循环加密。

        比如加密“hello”,加密结果就如下,加密后的密文为“FIDJS”,两个字母“l”分别对应D和J,就没法用统计法找出破绽了。    

        但该方法加密解密超费劲,人工处理很容易出错,所以发明了200年还未被广泛使用,直到能够采用机器进行处理之后,才被人翻出来使用。

       

#include <stdlibh>

#include <stdioh>

#include <stringh>

#define N 10000

void function(char message[],char key[],int mode); //加解密函数

int main()

{

int choose;

char m[N],key[N];

printf("维吉尼亚加密,请输入1;解密,请输入2:\n");

scanf("%d",&choose);

getchar();

if (choose == 1 || choose == 2)

{

if (choose == 1)

printf("输入明文:\n");

if (choose == 2)

printf("输入密文:\n");

gets(m);

printf("输入密钥:\n");

gets(key);

function(m,key,choose);

}

else

printf("输入错误!\n");

return 0;

}

void function(char message[],char key[],int mode) //加解密函数

{

int i, j = 0; //j控制key的轮回

int len_k = strlen(key); //密钥长度

char s[N];

for(i=0; message[i]!='\0'; i++)

{

if(message[i] == 32) //判断空格

s[i]=' ';

else

{

if (mode == 1)

s[i]=(int(message[i]-'a')+int(key[j%len_k]-'a'))%26+97;

if (mode == 2)

s[i]=(int(message[i]-'a')-int(key[j%len_k]-'a')+26)%26+97;

j++;

}

printf("%c",s[i]);

}

printf("\n");

}

gets(l);//不加这句M就输入不了为什么?

是因为没有这句的话,按的回车键就输成m了。

连用两个输入语句时,需要考虑回车键,就像我代码里的getchar()。

 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

A A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

B B C D E F G H I J K L M N O P Q R S T U V W X Y Z A CC D E F G H I J K L M N O P Q R S T U V W X Y Z A B

D D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V V W X Y Z A B C D E F G H I J K L M N O P Q R S T U

W W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z Z A B C D E F G H I J K L M N O P Q R S T U V W X Y

维吉尼亚密码引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密:

TO BE OR NOT TO BE THAT IS THE QUESTION

当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R,因此可以找到在R行中代替T的为K(key),依此类推,得出对应关系如下:

密钥:RELAT IONSR ELATI ONSRE LATIO NSREL

明文:TOBEO RNOTT OBETH ATIST HEQUE STION

密文:KSMEH ZBBLK SMEMP OGAJX SEJCS FLZSY

以上就是关于第三代加密法--维吉尼亚加密法全部的内容,包括:第三代加密法--维吉尼亚加密法、维吉尼亚密码c语言求改。、系统的介绍一下维吉尼亚密码的明文,密匙,和暗文等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9803769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存