信息安全概论作业一

“二八”妙龄写密码,看谁聪明“爱死他”。

密文:766C7273626F76706A5E6F715F7271766C72706D626B71716C6C71666A62

 

作业一的目标是解密上述密文,注意到密文本身由数字和字母构成,观察后可以发现字母均出现在偶数位。结合提示“二八”,容易想到这是十六进制下的表示。对照ascii码表,密文中的内容几乎都是小写的字母,故初步判断这段密文可能是两位一组,以十六进制数的形式变为对应的ascii码(中间可能涉及其他加密手段)。

 

使用以下代码两位两位处理密文,直接输出处理后的字符发现其意义不明。尝试对其简单移位后发现右移三位(凯撒密码的加密形式)能得到一个相对完整的句子,即明文为youverysmartbutyouspenttootime。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <string>
 5 #include <iostream>
 6 using namespace std;
 7 
 8 void trans(char ch[], int m)
 9 {
10     int n = strlen(ch);
11     int sum;
12     string s;
13     for (int i = 0; i < n-1; i +=2) {
14         sum = 16 * (ch[i] - '0');
15         if (ch[i + 1] < '9')        sum += ch[i + 1] - '0';
16         else    sum += ch[i + 1] - 'A' + 10;
17         printf("%c", sum + m);
18     }
19     printf("\n");
20 }
21 int main()
22 {
23     int i=0, j=0, k, n;
24     char sec[] = {"766C7273626F76706A5E6F715F7271766C72706D626B71716C6C71666A62"};
25     n = strlen(sec);
26     printf("%d\n", n);
27     for (k = -4; k < 5; k++)
28     {
29         printf("移位量为%d: ", k);
30         trans(sec, k);
31     }
32 
33 }

 

 

posted @ 2022-04-27 10:35  zzzz罗  阅读(43)  评论(0编辑  收藏  举报