用仿射密码解谜下列密文

用仿射密码解谜下列密文,第1张

码和乘法密码联合起来,就得到了所谓的仿射密码(affine cipher)—— 两种密码与一对密钥的组合。乘法密码使用第一个密钥,加法密码使用第二个密钥。如图3-11所示,仿射密码其实就是被先后使用的两种密码。我们本来可以提出一种有关加密和解密的复杂运算,如C = (P ′ k1 + k2) mod 26和P = ((C - k2) ′ k1-1) mod 26。然而,我们用临时结果(T)表示两种单独的运算,以表明无论什么时候使用密码组合,均需确保在行的另一端要有一个逆,该逆在加密和解密过程中使用的顺序是相反的。如果加法是加密过程中的最终运算,那么减法就是解密过程中的初始运算。

在仿射密码中,明文P和密文C的关系是

图3-11 仿射密码

例39

加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是:C= Ek(m)=(k1m+k2) mod nM= Dk(c)=k3(c- k2) mod n(其中(k3 ×k1)mod26 = 1)仿射密码具有可逆性的条件是gcd(k1, n)=1。当k1=1时,仿射密码变为加法密码,当k2=0时,仿射密码变为乘法密码。仿射密码中的密钥空间的大小为nφ(n),当n为26字母,φ(n)=12,因此仿射密码的密钥空间为12×26 = 312。

给你一个加密算法 我写的 用异或算法处理文本类的文档

#include<stdioh>

#include<conioh>

#include<stdlibh>

#include<timeh>

jiemi()

{

int k,l;

char FN[40],FS[40];

char ch,mima[40],x;

FILE f1,f2;

printf("输入要解密的文件夹名称:");

scanf("%s",FN);

if((f1=fopen(FN,"r"))==NULL)

{

printf("您的路径有误,系统将不能完成任务,请重新进入。");

getch();

exit(1);

}

printf("输入您要解密到的文件夹名称:");

scanf("%s",FS);

if((f2=fopen(FS,"w"))==NULL)

{

printf("您的输入有误,系统将不能完成任务,请重新进入。");

getch();

exit(1);

}

printf("输入密码:");

scanf("%s",mima);

l=strlen(mima);

k=0;

ch=fgetc(f1);

while(ch!=EOF)

{

k=k%l;

fputc(ch^mima[k],f2);

ch=fgetc(f1);

k++;

}

fclose(f1);

fclose(f2);

printf("解密成功,请在该软件目录找到您解密的文件。\n");

getch();

}

jiami()

{

int k,l;

char FN[20],FS[20];

char ch,mima[40],x;

FILE f1,f2;

printf("输入要打开的文件夹名称:");

scanf("%s",FN);

if((f1=fopen(FN,"r"))==NULL)

{

printf("您的路径有误,系统将不能完成任务,请重新进入。");

getch();

exit(1);

}

printf("输入要保存的文件夹名称:");

scanf("%s",FS);

if((f2=fopen(FS,"w"))==NULL)

{

printf("您的输入有误,系统将不能完成任务,请重新进入。");

getch();

exit(1);

}

printf("输入密码:");

scanf("%s",mima);

l=strlen(mima);

k=0;

ch=fgetc(f1);

while(ch!=EOF) //文件没有到底就继续 ,EOF文件的底部

{

k=k%l;

fputc(ch^mima[k],f2);

ch=fgetc(f1);

k++;

}

fclose(f1);

fclose(f2);

printf("加密成功,请在该软件目录找到您加密的文件。\n");

getch();

}

main()

{

char y;

while(1)

{

printf("说明:欢迎使用文件加密程序,该程序可以将txt文档加密为为不可读文件,解密后返回原状态\n\n");

printf("小提示:输入文件名字的时候请使用字母,数字或下划线。\n并且请加上(文件名)txt的后缀,要加密的文件请放在和程序文件同目录下\n\n");

printf(" 菜单\n");

printf(" 1加密 \n");

printf(" 2解密 \n");

printf(" 0退出 \n");

printf(" \n");

printf(" 请输入要执行的命令:\n");

y=getch();

switch(y)

{

case '1': jiami();system("cls");break;

case '2': jiemi();system("cls");break;

case '0': exit(0);

}

}

}

0到9的6位数密码一共有1000000组(一百万组),就是1000000种可能。

解答:这就涉及到排列与组合的问题了

0到9共十个数字,六位密码,共可以填六位数字,那么第一位密码可以是0到9中的任何一位,那么就是有10种可能,第二位都第六位密码都是同样的原理,每一位都有10种可能

这是排列问题,用乘法就可以解决,所以计算出组数:101010101010=1000000

扩展资料

排列组合基本计数原理

⑴加法原理和分类计数法

⒈加法原理:做一件事,完成它可以有n类办法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法,……,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+m3+…+mn种不同方法。

⒉第一类办法的方法属于集合A1,第二类办法的方法属于集合A2,……,第n类办法的方法属于集合An,那么完成这件事的方法属于集合A1UA2U…UAn。

⒊分类的要求 :每一类中的每一种方法都可以独立地完成此任务;两类不同办法中的具体方法,互不相同(即分类不重);完成此任务的任何一种方法,都属于某一类(即分类不漏)。

⑵乘法原理和分步计数法

⒈ 乘法原理:做一件事,完成它需要分成n个步骤,做第一步有m1种不同的方法,做第二步有m2种不同的方法,……,做第n步有mn种不同的方法,那么完成这件事共有N=m1×m2×m3×…×mn种不同的方法。

⒉合理分步的要求

任何一步的一种方法都不能完成此任务,必须且只须连续完成这n步才能完成此任务;各步计数相互独立;只要有一步中所采取的方法不同,则对应的完成此事的方法也不同。

3与后来的离散型随机变量也有密切相关。

二项式定理

通项公式:a_(i+1)=C(in)a^(n-i)b^i

二项式系数:C(in)杨辉三角:右图。两端是1,除1外的每个数是肩上两数之和。

系数性质:

⑴和首末两端等距离的系数相等;

⑵当二项式指数n是奇数时,中间两项最大且相等;

⑶当二项式指数n是偶数时,中间一项最大;

⑷二项式展开式中奇数项和偶数项总和相同,都是2^(n-1);

⑸二项式展开式中所有系数总和是2^n

参考资料

——排列组合

古典密码技术根据其基本原理大体可以分为两类:替换密码技术和换位密码技术。

古典密码是密码学中的其中一个类型,其大部分加密方式都是利用替换式密码或移项式密码,有时则是两者的混合。其于历史中经常使用,但在现代由于计算机的出现,使得古典密码解密已经不再困难,已经很少使用,大部分的已经不再使用了。

利用一个密钥字来构造替换作为密钥,先将密钥字作为首段密文,然后将之后未在字母表中出现过的字母依次写在此密钥字之后,构造出一个字母替换表。当密文为英文单词时,最多可以有26!个不同的替换表(包括恒等变换)。

替换密码技术:

替换密码技术是基于符号替换的密码技术。

一般有单字符单表替换密码技术、单字符多表替换密码技术等。

单字符单表替换密码技术:

又称单表代换加密技术,其方法是对明文中的所有字符都是用一固定映射,明密文一一对应。

仿射密码技术:

即结合乘法密码技术和移位密码技术。

它的加密函数是 e(x)=ax+b,其中a和 m互质,m是字母的数目。

解码函数是 d(x)=i(x-b)mod m,其中 i 是 a 的乘法逆元。

当a=0时,仿射密码技术退化为移位替换密码技术。

当b=0时,仿射密码技术退化为乘法密码技术。

这段密码接触的数字为:4194418141634192622374

注意一下这组数字 最大的是数字的范围是1-9

手机上一共有10个数字按键 其中0和1不对应任何字母

所以不存在0 而为什么会有1呢

大家在仔细看一下,如果将数字从左到右编序号,12345直到22

有没有发现奇数编号对应的数字没有1

所以奇数编号的数字应该是对应有字母的手机按键

而所有偶数编号对应的数字都是1234

为什么只有1234大家再看看手机,所有有字母的按键 最多只有4个字母,所以偶数编号的字母对应的是按键上的第几个字母

按照这个方法我们来看下这串数字 xx94xxxxxxx74

这是仅有的两个偶数编号的4 相对应9和7

你们再看看手机 只有按键9和7才对应4个字母 其它的都只对应3个

--------------------------------------------------------------------------------

我重新整合了这个解密步骤

如下

你们看解码出来分组后的数字分别是,

41 94 41 81 41 63 41 92 62 23 74

并且每个组合个位数都不超过4

特别是除了十位数是7和9这两个数字后面有4以外其他的都没有4

看图

手机的键盘上7和9的字母也是4个的,其他的都不超过4个字母

那么,按照上面的组合解码可得

G Z G T G O G X N C S

解码后我们发现每一组数字都能解释出来

目前我只能解码到这里的

虽然很不通顺,但我相信这里应该是个突破点

包括楼主的“她说途中有一个步骤是"替代密码"而密码表则是我们人类每天都可能用到的东西”

那么很可能就是电脑键盘

因为QWE的格式是被世人所认可的,也就有可能成为密码的码表

码表 QWE=ABC依次类推

那么解码G Z G T G O G X N C S

就是G=O Z=T G=O T=E G=O O=I G=O X=U N=Y C=V S=L

翻译过来就是 O T O E O I O U Y V L

其实到这里就已经大概知道答案是什么了

按照逻辑来整理,只要你重组这些字母的时候你就看到了

虽然重组有很多种例如,LV IOU ET OOO

可是这些没有语言性质因为楼主说过最终答案是英语

所以唯一一个符合逻辑的答案应该是I LOVE YOU TOO

可是我还不确定

因为这里我才解了第3层就已经看出答案了

所以我决定用O T O E O I O U Y V L

进行再次解码

我用了很多种解码方法

凯撒,乘法等等

最后我发现了只有栅栏才能读得通

分成两排

O T O E O I

O U Y V L

重组后,OOTUOYEVOLI

然后倒序,ILOVEYOUTOO

I LOVE YOU TOO就自然而然的出来了

最后我才肯定密码就是 I LOVE YOU TOO

加法密码就是真典密码学中的恺撒密码格式是:密文=(明文+密钥)mod26,剩法密码是恺撒密码发展出来,格式是:密文=明文x实钥mon26;置换密码就是在简单的纵行换位密码中,明文以固定的宽度水平的写在一张图表纸上,密文按垂直方向读出,解密就是密文按相同的宽度垂直的写在图表纸上,然后水平的读出明文。希尔密码(Hill Cipher)是运用基本矩阵论原理的替换密码,由Lester S Hill在1929年发明。每个字母当作26进制数字:A=0, B=1, C=2 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果MOD26;Vigenere是恺撒密码演变而来。使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。

有兴趣可以了解一下古典密码学,这里面都有。

欢迎分享,转载请注明来源:表白网

原文地址:https://h5.hunlipic.com/biaobai/3083808.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存