1、文件加密程序:将待加密文件以二进制打开,读入32个字节,分别与口令异或,在将4、5、6三个字分别与0xaaaa异或,即完成加密,执行第二次就解密。 这道题怎么做啊?
1条回答 默认 最新
CSDN专家-黄老师 2021-06-30 16:28关注#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; }如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢
解决 无用评论 打赏 举报