文章作者:冰血封情 [E.S.T]
信息来源:邪恶八进制安全小组 ([url]www.eviloctal.com[/url])
其实这个查不多是学校的网络安全实验的实验报告 本次实验其实主要是要研究一下简单的密码加密解密算法 首先根据老师的要求我写了一个异或加密解密的程序 程序主要实现用异或的方式对明文文本进行加密和密文文本的解密 是对称的算法 程序如下:
信息来源:邪恶八进制安全小组 ([url]www.eviloctal.com[/url])
其实这个查不多是学校的网络安全实验的实验报告 本次实验其实主要是要研究一下简单的密码加密解密算法 首先根据老师的要求我写了一个异或加密解密的程序 程序主要实现用异或的方式对明文文本进行加密和密文文本的解密 是对称的算法 程序如下:
#i nclude <stdio.h>
#i nclude <stdlib.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);
{
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后多少位字母再进行异或就可以使加密更强健 使用的时候 程序会提示你
|
按照说明使用 比如将如下的明文:
|
加密后成如下的样子:
|
同样的方法可以解密 这就是一个简单的异或对称加密程序 当然我这里是内置了密钥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;
}
{
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);
fclose(fp1);
fclose(fp2);
return 0;
}
}
这个程序的用法是 把明文密文的第一个字符放在两个不同的文件里 然后执行程序 程序自己进行穷举核对 一旦爆出密钥立刻终止循环 打印成功消息和破解出来的密钥
至于非对称加密其实也一样的道理 关键是算法 算法有了语句好办 这次实验就这么短个简单的东西...
插曲:
做第一个小练习的时候还遇见了一个文件末尾判断的问题 在使用EOF和feof();的时候出现的 其实是文件指针的指向地址的问题 还是非常感谢偶们小组的 Bideyore参与讨论给出指导分析
至于非对称加密其实也一样的道理 关键是算法 算法有了语句好办 这次实验就这么短个简单的东西...
插曲:
做第一个小练习的时候还遇见了一个文件末尾判断的问题 在使用EOF和feof();的时候出现的 其实是文件指针的指向地址的问题 还是非常感谢偶们小组的 Bideyore参与讨论给出指导分析
本文转自loveme2351CTO博客,原文链接:http://blog.51cto.com/loveme23/8383
,如需转载请自行联系原作者