计算机安全与可靠性实验之加密与解密

文章作者:冰血封情 [E.S.T]
信息来源:邪恶八进制安全小组 ([url]www.eviloctal.com[/url])

其实这个查不多是学校的网络安全实验的实验报告 本次实验其实主要是要研究一下简单的密码加密解密算法 首先根据老师的要求我写了一个异或加密解密的程序 程序主要实现用异或的方式对明文文本进行加密和密文文本的解密 是对称的算法 程序如下:
#i nclude
#i nclude
int main(int argv, char *argc[])
{
       char ch;
       int key = 4;  //密钥
       FILE *fp1, *fp2;
       if(argv != 3)  //参数不是3就打印使用方法
       {
              printf("Parameter error!\n");
              printf("Usage: code.exe \n");
              exit (0);
       }
       if((fp1 = fopen(argc[1], "r")) == NULL)  //打开读入
       {
              printf("Error open %s!\n", argc[1]);
              printf("Please check the file...\n");
              exit (0);
       }
       if((fp2 = fopen(argc[2], "w")) == NULL)  //打开输出
       {
              printf("Error open %s!\n", argc[2]);
              printf("Please check the file...\n");
              exit (0);
       }
       while((ch = fgetc(fp1)) != EOF)
       {
              printf("%c ", ch);
              ch = ch ^ key;  //加解密过程
              printf("%c\n", ch);
              fputc(ch, fp2);
       }
       printf("Success encrypt!\n");
       fclose(fp1);
       fclose(fp2);
       return 0;
}
程序十分简单意在演示 你可以使用自己的复杂点的算法 比如和该字母ASCII后多少位字母再进行异或就可以使加密更强健 使用的时候 程序会提示你
Usage: code.exe

按照说明使用 比如将如下的明文:
I L0ve CuiE!

加密后成如下的样子:
M$H4ra$GqmA%

同样的方法可以解密 这就是一个简单的异或对称加密程序 当然我这里是内置了密钥key的 你也可以让用户自己输入密钥 也是一样的
好了现在我们来做第二个程序:给出明文和密文 求密钥
也就是一个暴力破解的过程 我们这里使用穷举
仍然假设给出的明文密文如上 我们现在来破解他得到密钥 我们的意图是假设已经知道密钥在数字0到1000之间 现在我们来进行逐一穷举 程序如下:
#i nclude
#i nclude
int main(int argv, char *argc[])
{
       char ch1, ch2;
       int key;
       FILE *fp1, *fp2;
       if(argv != 3)  //参数不是3就打印使用方法
       {
              printf("Parameter error!\n");
              printf("Usage: code.exe \n");
              exit (0);
       }
       if((fp1 = fopen(argc[1], "r")) == NULL)  //打开读入
       {
              printf("Error open %s!\n", argc[1]);
              printf("Please check the file...\n");
              exit (0);
       }
       if((fp2 = fopen(argc[2], "r")) == NULL)  //打开输出
       {
              printf("Error open %s!\n", argc[2]);
              printf("Please check the file...\n");
              exit (0);
       }
       ch1 = fgetc(fp1);
       ch2 = fgetc(fp2);
       printf("%c ", ch1);
       printf("%c\n", ch2);
       for(key = 0; key < 1000; key ++)  //穷举
       {
              if(ch2 == (ch1 ^ key))  //判断
              {
                     printf("Success Brute Force!\n");
                     printf("The Key is %d\n", key);
                     break;
              }
       }
       
       fclose(fp1);
       fclose(fp2);
       return 0;
}
这个程序的用法是 把明文密文的第一个字符放在两个不同的文件里 然后执行程序 程序自己进行穷举核对 一旦爆出密钥立刻终止循环 打印成功消息和破解出来的密钥
至于非对称加密其实也一样的道理 关键是算法 算法有了语句好办 这次实验就这么短个简单的东西...
插曲:
做第一个小练习的时候还遇见了一个文件末尾判断的问题 在使用EOF和feof();的时候出现的 其实是文件指针的指向地址的问题 还是非常感谢偶们小组的 Bideyore参与讨论给出指导分析

















本文转自loveme2351CTO博客,原文链接:http://blog.51cto.com/loveme23/8383  ,如需转载请自行联系原作者


你可能感兴趣的:(计算机安全与可靠性实验之加密与解密)