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

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

其实这个查不多是学校的网络安全实验的实验报告 本次实验其实主要是要研究一下简单的密码加密解密算法 首先根据老师的要求我写了一个异或加密解密的程序 程序主要实现用异或的方式对明文文本进行加密和密文文本的解密 是对称的算法 程序如下:
#i nclude <stdio.h>
#i nclude <stdlib.h>
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 <infile> <outfile>\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 <infile> <outfile>

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

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

同样的方法可以解密 这就是一个简单的异或对称加密程序 当然我这里是内置了密钥key的 你也可以让用户自己输入密钥 也是一样的
好了现在我们来做第二个程序:给出明文和密文 求密钥
也就是一个暴力破解的过程 我们这里使用穷举
仍然假设给出的明文密文如上 我们现在来破解他得到密钥 我们的意图是假设已经知道密钥在数字0到1000之间 现在我们来进行逐一穷举 程序如下:
#i nclude <stdio.h>
#i nclude <stdlib.h>
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 <enfile> <defile>\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  ,如需转载请自行联系原作者


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值