你所说的“这个维吉尼亚密码”指的是哪个维吉尼亚密码?
好吧,我知道了,是百度百科的(答你这题还得有点联想能力……)
“TO BE OR NOT TO BE THAT IS THE QUESTION
当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R”
额,上面不是说了吗用"RELATIONS"作为密钥那么明文第一个字母T对应的密钥就是R。你要想问"RELATIONS"这个密钥砸来的?我告诉你,想来的,这个密钥你想用啥单词就用啥单词,越生僻的单词越好,选完密钥后加密,但密钥长度不够,那么就重复使用,如下:
密钥:RELAT IONSR ELATI ONSRE LATIO NSREL
明文:TOBEO RNOTT OBETH ATIST HEQUE STION
密文:KSMEH ZBBLK SMEMP OGAJX SEJCS FLZSY
给你个维吉尼亚密码加密解密用的程序,使用后就能更好理解:
(别告诉我这是个只上一次的小号……我的采纳率被这种号害惨了……)
采用替代密码算法中的维吉尼亚密码方法,密文C=“HEADVIGENERE”,密钥K=KEY,求明文P
将密文HEADVIGENERE用密钥替换后为KEYKEYKEYKEY
替换前:HEADVIGENERE
替换后:KEYKEYKEYKEY
解密求明文:
按替换后的内容找到第一行的K所在位置向下寻找,找到H的位置,当前行最左侧第一列对应的就为明文X
加密求密文:
按明文找到第一列对应的H,在从第一行中找到对应的密钥K,两个位置相交的值就为密文.
答案:
HEA DVI GEN ERE
KEY KEY KEY KEY
XAC TRK WAP UNG
表白也是考智商的活啊!下面这些高级表白密码赶紧学起来,要不真的都看不懂暗恋你的人到底是不是对你表白了。
一、高级表白密码
1.字母表白数字密码:9121522521
表白解密:从1开始到26,分别表示从A到Z,即:A(1)B(2) C(3) D(4) E(5) F(6) G(7) H(8) I(9) J(10) K(11) L(12) M(13) N(14) O(15) P(16) Q(17) R(18) S(19) T(20) U(21) V(22) W(23) X(24) Y(25) Z(26)。
9=I
12=L
15=O
22=V
5=E
21=U
结果是 I LOVE U。所以,当你发送这样一串数字给你喜欢的人的时候,跟他(她)说这是一串特别特别有意义的数字,让他(她)解开。如果他(她)能解开,一定会感受到你的心意。解不开,也会增加他(她)对你的神秘感。挑起他(她)对你的兴趣。
2.大小写变化:ilOvEU
表白解密:这个很简单,换成我们常见的大小写即可。
3.空格重组:il ov eu
表白解密:这个表白密码也容易识别,两个空格移位即可。
4.单词倒序:i evol u
5.整句倒序:u evol i
6.凯撒移位:j mpwf v
7.反字母表(埃特巴什码/Atbash):r olev f
表白解密:把26个字母对折(词穷,暂且这样描述。)就会得到:
A B C D E F G H I J K L M
Z Y X W V U T S R Q P O N所以,R对应的就是I,E对应的就是L,O对应的就是L,L对应的就是O,E对应的就是V,V对应的就是E,F对应的就是U
答案:I LOVE U 。或者我们可以用这个:R OLEV BLF,对应的也就是I LOVE YOU 了。
8.栅栏密码:ioelvu
表白解密:所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一.两句话),我们的ioelvu 就是把love拆开,然后先逆向排列两个,再逆向插空排列。
9.维吉尼亚密码(密钥i love u):q wcqi o
10.维吉尼亚密码(密钥12345…):j nrzj a
11.仿射密码(Affine *3+5):d mvqr n
12.希尔密码(Hill 密钥矩阵{3,2;5,7}):ungjae
13.纳粹Enigma(密钥ABC):YAPOJ R
14.摩斯电码:·· ·—·· ——— ···— · ··—
15.棋盘密码(波利比奥斯密码/Polybius):gd ag df ff xf gg
16.棋盘密码(数字):14 14 23 33 53 44
17.ADFGX密码(密钥love):gfg gdx dff afg
18.键盘密码1:71 31 43 91 92 81
19.键盘密码2:*1 (2 (1 $3 #1 1
20.键盘移位:o ;pbr i
21.数字表白解密
1314——?一生一世740——气死你596——我走了456——是我啦7998——去走走吧53770——我想亲亲你53719——我深情依旧25184——爱我一辈子520——我爱你
0594184——你我几是一辈子220225——爱爱你爱爱我584520——我发誓我爱你246437——爱是如此神奇1314925——?一生一世就爱我594230——我就是爱想你360——想念你2010000——爱你一万年1372——?一厢情愿259695——爱我就了解我078——你去吧74839——其实不想走20999——爱你久久久5871——我不介意82475——被爱就是幸福
775885——亲亲我抱抱我08376——你别生气了3307778——想和你去吹吹风095——你找我8006——不理你了25873——爱我到今生20863——爱你到来生3399——长长久久1573——?一往情深234——爱相随20863——爱你到来生3456——相思无用
二、暗恋又不敢表白的句子
1.每天都会上QQ, 只是想看看你的灰色头像, 是否会闪动, 看你的资料是否有更新
2.你只是路过我的世界,从未参与过我的生活。
3.一直默默的在你身后守侯着你,只为看见你幸福的笑脸。
4.你有没有一个喜欢却永远都不会去追的人
5.观看伱旳幸福,听俄旳心在流血耶。
6.你心里一直会有他,我心里却一直痛。
7.带着温暖的疏离感,当仁不让的做着路人或过路人。
8.时光不停的流逝,我明明知道我们不能在一起,我还在那个角落里傻傻的等着你。
9.站在世界的极端,卑微的望着被幸福围绕的你。
10.每次发说说,都带有某种心情想要传达给某个人,可惜某个人不懂。
11. 落花已作风前舞,流水依旧只东去。无情不似多情苦,一寸还成千万缕。天涯海角有穷时,只有相思无尽处。
12. 我本将心向明月,奈何明月照沟渠,漠漠轻寒上小楼,晓音无赖似穷愁.淡烟流水画屏幽. 自在飞花皆似梦,无边私语细如愁.宝帘闲挂小银钩.
13. 我喜欢你,你却不知道,也许不是不知道,而是在回避什么,我会等待,等待你能彻底把她忘掉,等待你能接收我,若此期间你爱上了别人,我也会默默祝福你,因为至少我释怀了,阐明你走出来了,我会笑着祝福你,而后把对你的爱永远埋在心底最深处,虽然也许我再也不会爱上别人了,但我还是会认为幸福的,因为你幸福了。
14.爱上你,是莪情不自禁。
15.每次你看我的时候我都假装在看别处,而每次你在看别处的时候,我都在看着你。
16.最温柔的月光,也敌不过,你转瞬的回眸。
17. 不求你懂得,我万水千山的心情。
18. 看见了,世界美好,霞光万丈;看不见,地暗天昏,人生失迷。
19. 缺憾是情感最有余味的一种终局。
20. 只有从没产生过的,才干在我领有修正权的记忆里,演化成无穷完善的版本。本来,我始终是一个如此自私的人。
三、暗恋的句子
1.感叹知己难寻,感叹知音难觅,感叹不可遏止的孤独与苦闷,彷徨与失意;直到遇到了你,感叹变成了感谢!感谢命运的关照,感谢上帝的垂怜,感谢你的出现。
2.付出你的真诚,不需要你的允诺;付出你的真情,不需要你的许诺;实心实意来爱我,山盟海誓算什么,只需行动不需要你说,爱我你就嫁给我,嫁我吧。
3.好笑吗?身边没你,好怪,陪我一生一世好吗?
4.我每时每刻都在思恋的“苦刑”下熬煎,不知你何日方能赐恩,减轻我的这种苦刑!
5.不知为什么,只要有你在我身边,我的心便不再惶惶不安。
6. 这么多年来,我一直在寻找理想的爱情,但没有一个人能像你那样在最初的时刻打动了我,而且越来越深沉的打动。
7. 我终于发现,这世界上有丰厚的爱,我不能辜负。于是我想对你说,我爱你,请你倾听……
8. 我深深地恳求你;不要把我逐出你的爱门之外,我一分一秒也不能缺少你的爱。只有赢得你的爱,我的生命才有光彩。
9.你不曾给我一次回眸,我却始终在对你微笑。
10.痴情的一方注定伤的最深,自古痴情终成空。
11.我终生的等候,换不来你刹那的凝眸。
12.我的选择是爱你或更爱你,你的选择是爱我或不爱我。
13.宁愿笑着流泪 也不哭着说后悔。
14.我的翅膀 被一滴泪烫伤 飞不到天堂。
15. 总有一天,你会看到我的心里,那里 全是你给的悲伤。
16.有一种喜欢叫沉默,而这种沉默叫暗恋,我选择沉默,是不想面对你的谎言,可以假装无所谓,才看不到心被拧碎。
17.你是我的定格,我是你的过客。
18.天天想你,痛了自己,时时盼你,骗了自己。
19.我想你不会笨到不知道我想对你说的是这句话的前三个字吧。
20.就算全世界与我为敌,我也会继续爱你。
学号:16030140019
姓名: 莫益彰
【嵌牛导读】:凯撒密码是一种简单的加密方法,即将文本中的每一个字符都位移相同的位置。如选定位移3位:
原文:a b c
密文:d e f
由于出现了字母频度分析,凯撒密码变得很容易破解,因此人们在单一恺撒密码的基础上扩展出多表密码,称为“维吉尼亚”密码。
【嵌牛鼻子】密码学,计算机安全。
【嵌牛提问】维吉尼亚怎么破解,8位维吉尼亚是否可破?维吉尼亚算法的时间复杂度?
【嵌牛正文】
维吉尼亚密码的加密
维吉尼亚密码由凯撒密码扩展而来,引入了密钥的概念。即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密:
TO BE OR NOT TO BE THAT IS THE QUESTION
当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R,因此可以找到在R行中代替T的为K,依此类推,得出对应关系如下:
密钥:RE LA TI ONS RE LA TION SR ELA TIONSREL
明文:TO BE OR NOT TO BE THAT IS THE QUESTION
密文:KS ME HZ BBL KS ME MPOG AJ XSE JCSFLZSY
图解加密过程:
在维吉尼亚(Vigenère)的密码中,发件人和收件人必须使用同一个关键词(或者同一文字章节),这个关键词或文字章节中的字母告诉他们怎么样才能前后改变字母的位置来获得该段信息中的每个字母的正确对应位置。
维吉尼亚密码的破解
维吉尼亚密码分解后实则就是多个凯撒密码,只要知道密钥的长度,我们就可以将其分解。
如密文为:ABCDEFGHIJKLMN
如果我们知道密钥长度为3,就可将其分解为三组:
组1:A D G J N
组2:B E H K
组3:C F I M
分解后每组就是一个凯撒密码,即组内的位移量是一致的,对每一组即可用频度分析法来解密。
所以破解维吉尼亚密码的关键就是确定密钥的长度。
确定密钥长度
确定密钥长度主要有两种方法,Kasiski 测试法相对简单很多,但Friedman 测试法的效果明显优于Kasiski 测试法。
Kasiski 测试法
在英文中,一些常见的单词如the有几率被密钥的相同部分加密,即原文中的the可能在密文中呈现为相同的三个字母。
在这种情况下,相同片段的间距就是密文长度的倍数。
所以我们可以通过在密文中找到相同的片段,计算出这些相同片段之间的间距,而密钥长度理论上就是这些间距的公约数。
然后我们需要知道重合指数(IC, index of coincidence)的概念。
重合指数表示两个随机选出的字母是相同的的概率,即随机选出两个A的概率+随机选出两个B的概率+随机选出两个C的概率+……+随机选出两个Z的概率。
对英语而言,根据上述的频率表,我们可以计算出英语文本的重合指数为
P(A)^2 + P(B)^2+……+P(Z)^2 = 0.65
利用重合指数推测密钥长度的原理在于,对于一个由凯撒密码加密的序列,由于所有字母的位移程度相同,所以密文的重合指数应等于原文语言的重合指数。
据此,我们可以逐一计算不同密钥长度下的重合指数,当重合指数接近期望的0.65时,我们就可以推测这是我们所要找的密钥长度。
举例来说,对密文ABCDEABCDEABCDEABC
首先测试密钥长度=1,对密文ABCDEABCDEABCDEABC统计每个字符出现的次数:
A: 4 B: 4 C: 4 D:3 E:3
那么对于该序列的重合指数就为:(4/18)^2 + (4/18)^2 + (4/18)^2 +(3/18)^2 +(3/18)^2 != 0.65
然后测试密钥长度=2,将密文ABCDEABCDEABCDEABC分解为两组:
组1:A C E B D A C E B
组2:B D A C E B D A C
我们知道如果密钥长度真的是2,那么组1,组2都是一个凯撒密码。对组1组2分别计算重合指数。
如果组1的重合指数接近0.65,组2的重合指数也接近0.65,那么基本可以断定密钥长度为2。
在知道了密钥长度n以后,就可将密文分解为n组,每一组都是一个凯撒密码,然后对每一组用字母频度分析进行解密,和在一起就能成功解密凯撒密码。
上文已经说到,自然语言的字母频度是一定的。字母频度分析就是将密文的字母频度和自然语言的自然频度排序对比,从而找出可能的原文。
维吉尼亚密码是以法国外交官、密码学家布莱斯·德·维吉尼亚的名字命名的,不过不是他本人发明的。
【加密原理】
维吉尼亚密码是在凯撒密码的基础上产生的一种加密方法,它将凯撒密码的全部25种位移排序为一张表,与原字母序列共同组成26行26列的密码表。
除了密码表,还必须有一个密钥。密钥由字母组成,最少一个字母,最多可与明文字母数相等。如果密钥只有1个字母,相当于就是凯撒密码。举个例子:
明文:I Love You
密钥:OK
首先,密钥长度需要与明文长度相同,如果少于明文长度,则重复拼接直到长度相等。本例中,明文长度为8个字母(非字母忽略),密钥补全为“OKOKOKOK”。
然后根据密码表进行加密。明文第一个字母是“I”,密钥第一个字母是“O”,在表格中找到“I”列与“O”行的相交点,字母“W”就是密文的第一个字母。同理,“L”列与“K”行交点字母是“V”。“O”列与“O”行交点字母是“C”……以此类推,得到密文: W VCFS ICE。
【解密原理】
密文:PWZRNZBZ EA NQKBUHN LNB
密钥:wind
首先把密钥重复拼接到和密文长度相同,上例中密文为20位字母,密钥拼接后为:windwindwindwindwind。
密文P对应密钥W,在密码表中找出W行为P的列,沿着这一列向上找到最上面的字母是T。以此类推,得到明文:tomorrow is another day。
给,网上的C++的基本都有问题,我给你改好一个,已经编译运行确认,
#includeiostream
using namespace std;
#define MINCHAR 32
#define CHARSUM 94
char table[CHARSUM][CHARSUM];
bool Init();
bool Encode(char* key, char* source, char* dest);
bool Dncode(char* key, char* source, char* dest);
int main()
{
if(!Init())
{
cout "初始化错误!" endl;
return 1;
}
char key[256];
char str1[256];
char str2[256];
int operation;
while(1)
{
do
{
cout "请选择一个操作:1. 加密; 2. 解密; -1. 退出\n";
cin operation;
}while(operation != -1 operation != 1 operation != 2);
if(operation == -1)
return 0;
else if(operation == 1)//加密
{
cout "请输入密钥:";
cin key;
cout "请输入待加密字符串:";
cin str1;
Encode(key, str1, str2);
cout "加密后的字符串:" str2 endl;
}
else if(operation == 2)//解密
{
cout "请输入密钥:";
cin key;
cout "请输入待解密字符串:";
cin str1;
Dncode(key, str1, str2);
cout "解密后的字符串:" str2 endl;
}
cout endl;
}
return 0;
}
// 初始化维吉尼亚方阵
bool Init()
{
int i, j;
for(i = 0; i CHARSUM; i++)
{
for(j = 0; j CHARSUM; j++)
{
table[i][j] = MINCHAR + (i + j) % CHARSUM;
}
}
return true;
}
// 加密
// key:密钥
// source:待加密的字符串
// dest:经过加密后的字符串
bool Encode(char* key, char* source, char* dest)
{
char* tempSource = source;
char* tempKey = key;
char* tempDest = dest;
do
{
*tempDest = table[(*tempKey) - MINCHAR][(*tempSource) - MINCHAR];
tempDest++;
if(!(*(++tempKey)))
tempKey = key;
}while(*tempSource++);
dest[strlen(source)] = 0;
return true;
}
// 解密
// key:密钥
// source:待解密的字符串
// dest:经过解密后的字符串
bool Dncode(char* key, char* source, char* dest)
{
char* tempSource = source;
char* tempKey = key;
char* tempDest = dest;
char offset;
do
{
offset = (*tempSource) - (*tempKey);
offset = offset = 0 ? offset : offset + CHARSUM;
*tempDest = MINCHAR + offset;
tempDest++;
if(!(*(++tempKey)))
tempKey = key;
}while(*++tempSource);
dest[strlen(source)] = 0;
return true;
}