【发布时间】:2015-06-12 12:22:36
【问题描述】:
我正在尝试通过对左右字符使用来自另一个文件 (keys.txt) 的两个特定密钥的按位异或运算来加密来自文本文件的消息,但我在前面收到不可读的代码原始文本文件(没有改变),这是不对的。我正在使用两个文本文件:
1) Input.txt - 包含要加密的消息
2) Keys.txt - 这包含对 input.txt 中的每个字符进行 XOR 运算的两个字符(字符 1 是键 1,字符 2 是键 2)
我的程序中的以下代码:
str[i]=str[i]^str2[2];
str[++i]=str[i]^str2[1];
break;
是假定执行 XOR 操作的代码行
注意我想要的输出应该是这样的:
m@#EmI(>9S(@)H#FmN# XGmmmmU,H!Gmr(DmI"VmD,F(S!XmU%DmM"C>U(S>,O)9I(9T?U! D>,M!,E;@#B(Gmu%D4,S(:@$U$O*"OmU%DmR%H#F!D`V$M!4N8.N Dm@#EmK"H# 9I(+mmmm)@#B(f
有人可以澄清我遇到的问题吗?
用户应输入:
gcc myProgram.c
./a.out e input.txt keys.txt
(e 代表加密)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int args, char *argc[]){
int i;
int len=0;
char str[1024];
char str2[2];
FILE *finp;
FILE *keyFile;
if ( strcmp(argc[1], "e") == 0 )
{
if ( (finp = fopen(argc[2],"r")) == NULL )
{
printf("Could Not Open file %s\n", argc[2]);
exit(1);
}
if ( (keyFile = fopen(argc[3],"r")) == NULL )
{
printf("Could Not Open file %s\n", argc[3]);
exit(1);
}
while((fgets(str,1024,finp)!=NULL)&(fgets(str2,2,keyFile)!=NULL))
{
printf("%c\n %c",str2[1],str2[2]);
/* *** START CODE THAT USES INPUT.TXT FILE & KEYS.TXT *** */
len = strlen(str);
for(i=0;i<len;i++)
{
str[i]=str[i]^str2[2];
str[++i]=str[i]^str2[1];
break;
}
}
printf("%s\n", str);
fclose(finp);
return 0;
}
else
{
printf("SORRY!");
}
【问题讨论】:
-
不要称之为加密。 :-)
-
这是一种加密,尽管它很弱。它是移位密码(Caesar Cipher)。
标签: c encryption xor