C语言 异或加密 10

文件加密解密。将文件file1中的每一字符与0x6a异或变成另一个字符送屏幕显示,同时存入文件file2中。打开加密的file2输出解密内容。file1文件内容是:Thi... 文件加密解密。将文件file1中的每一字符与0x6a异或变成另一个字符送屏幕显示,同时存入文件file2中。打开加密的file2输出解密内容。

file1文件内容是:This is a book.

路径为:d:\file1.txt
d:\file2.txt

(请从命令行输入)

特别提示:

1.异或的C语言描述方式
a=a^b

(a和b异或后值赋给a)

2.a和b异或的结果再与b相异或则a还原。

3.
0x6a是16进制,可直接赋值给int b=0x6a;然后用b与a进行异或。
展开
 我来答
风若远去何人留
2015-11-13 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450136
专业C/C++软件开发

向TA提问 私信TA
展开全部
C语言异或加密实现的原理为,将任意值,与相同值两次异或后,结果与原值相同。所以可以通过将源数据与一个固定的值(秘钥key)异或后,得到密文,然后将密文再次与秘钥异或,得到原文。这样就实现了异或加密及解密。

C语言中的异或是一种按位操作的计算,其计算原理为,操作数对应位上的值相同,则结果位上值为0,否则为1.异或的运算符号为^,于是真值表如下:

0^0=0
0^1=1
1^0=1
1^1=0
这样区分源数据和秘钥值,有如下四种可能:
0^0=0 0^0=0
0^1=1 1^1=0
1^0=1 1^0=1
1^1=0 0^1=1
以上是将一个值,用另一个值连续异或两次后的计算过程,可以看到,最终的值与原始值是相同的。这就是异或加密的基础原理。
21...7@qq.com
2014-06-19
知道答主
回答量:18
采纳率:0%
帮助的人:8.9万
展开全部
这个我不会。

给文件加密,我使用的是超级加密3000。

超级加密3000有超快和最强的文件、文件夹加密功能、数据保护功能,文件夹、文件的粉碎删除以及文件夹伪装等功能。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
祭扬Ws
2014-06-15 · TA获得超过135个赞
知道答主
回答量:186
采纳率:100%
帮助的人:59万
展开全部
常见的算法。
#include<stdio.h>
viod main()
{
FILE *in, *out;
char *in_file, *out_file;
char ch;
printf(" input in file name:\n");
gets(in_file);
printf(" input out file name:\n");
gets(out_file);
in = fopen( in_file, "rb"); /*以二进制只读方式打开*/
out = fopen( out_file, "wb");
if( in == NULL || out == NULL ) exit(1);
ch = fgetc(in);
while( ch != -1 ) /*若文件没有结束*/
{
ch = ch^1; /*异或运算*/
fputc( ch, out ); /*将异或结果放入输出文件中*/
ch = fgetc(in);
}
fclose(in);
fclose(out);
}
是否可以解决您的问题?
追问
不是啊,要用0x6a
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LaoCooon
2015-10-25
知道答主
回答量:76
采纳率:0%
帮助的人:20.8万
展开全部
char encrypt( char f , char c)

  {

  return f^c;

  }

  int OutEncrypt( char *FilePath, char *SecretWord )

  {

  FILE * fp ;

  FILE * fp1;

  char *p= FilePath , *s= SecretWord;

  //char fn[128], *p = fn, ps[10], *s = ps; //fn[128]存放加密文件路径,ps[10]存放密码

  char ch;

  char *tm = "C:\\temp.temp"; //存放临时文件

  if(( fp = fopen(p,"rb") )== NULL || ( fp1 = fopen(tm,"wb") ) == NULL )

  {

  return 0; //加密失败

  }

  ch = fgetc(fp);

  while( !feof(fp) )

  {

  s = SecretWord;

  while( *s != '\0' )

  {

  ch = encrypt( ch, *s++ );

  fputc( ch, fp1 );

  ch = fgetc(fp);

  }

  }

  fclose( fp );

  fclose( fp1);

  remove(p);

  rename(tm, p);

  return 1; //加密成功

  }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式