1、文件加密程序:将待加密文件以二进制打开,读入32个字节,分别与口令异或,在将4、5、6三个字分别与0xaaaa异或,即完成加密,执行第二次就解密。 这道题怎么做啊?
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
FILE *fpr,*fpw;//注意 FILE 为全大写
char ch,key=0xfa;//初始密钥
//命令行参数必须是3个,且第3个参数必须是+/-
if(argc!=3 || *argv[2]!='+'&& *argv[2]!='-')
{
printf("usage: 可执行文件名 文件名 +/-");
return 0;
}
//以读二进制文件的方式打开指定文件
if((fpr=fopen(argv[1],"rb"))==NULL)
{
printf("cannot open this file");
return 0;
}
//以读写二进制文件的方式打开指定文件
//因为会不断对fpw进行写操作【逐字符写】,
//为避免后一次写操作覆盖了前一次内容,不可使用"w+"
if((fpw=fopen(argv[1],"rb+"))==NULL)
{
printf("cannot open file");
return 0;
}
//逐字符读取文件fpr中,直至到达文件尾(EOF表示文件尾,值为-1)
while((ch=fgetc(fpr))!=EOF)
{
//将读取到的字符加密【与k按位异或】后写到文件fpw中
fputc(ch^key,fpw);
/*
当第三个参数为+【加密】时,
更新密钥key=ch,使对下一个字符的加密密钥总是前一个字符
当第3个参数为-【解密】时,
更新key=ch^k,反向操作,使fputc()中有(ch^k)^k=ch,达到解密的目的
*/
key=(*argv[2]=='+')?ch:ch^key;
}
fclose(fpr);
fclose(fpw);
return 0;
}
如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢