信息安全概论作业一
“二八”妙龄写密码,看谁聪明“爱死他”。
密文: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 }