码和乘法密码联合起来,就得到了所谓的仿射密码(affine cipher)—— 两种密码与一对密钥的组合。乘法密码使用第一个密钥,加法密码使用第二个密钥。如图3-11所示,仿射密码其实就是被先后使用的两种密码。我们本来可以提出一种有关加密和解密的复杂运算,如C = (P ′ k1 + k2) mod 26和P = ((C - k2) ′ k1-1) mod 26。然而,我们用临时结果(T)表示两种单独的运算,以表明无论什么时候使用密码组合,均需确保在行的另一端要有一个逆,该逆在加密和解密过程中使用的顺序是相反的。如果加法是加密过程中的最终运算,那么减法就是解密过程中的初始运算。
在仿射密码中,明文P和密文C的关系是
图3-11 仿射密码
例39
加法密码就是真典密码学中的恺撒密码格式是:密文=(明文+密钥)mod26,剩法密码是恺撒密码发展出来,格式是:密文=明文x实钥mon26;置换密码就是在简单的纵行换位密码中,明文以固定的宽度水平的写在一张图表纸上,密文按垂直方向读出,解密就是密文按相同的宽度垂直的写在图表纸上,然后水平的读出明文。希尔密码(Hill Cipher)是运用基本矩阵论原理的替换密码,由Lester S Hill在1929年发明。每个字母当作26进制数字:A=0, B=1, C=2 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果MOD26;Vigenere是恺撒密码演变而来。使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
有兴趣可以了解一下古典密码学,这里面都有。
加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是: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。
这段密码接触的数字为: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
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
参考资料
——排列组合
给你一个加密算法 我写的 用异或算法处理文本类的文档
#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条)