异或加密和解密的处理算法是一样的,密钥也是一样的,且无顺序之分
加密前
1234
啊啊啊啊
sdsfgh 撒大大
加密后
NMLK
氷鯕牾氷鯕牾
_欗須圬氎?
代码
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
char encrypt_char(char arg){
arg ^= 's';
arg ^= 'c';
arg ^= 'o';
//加密生成的'\0'等字符会影响之后对文件读取,再次异或消除掉。解密时也是同样的处理算法
if(arg == '\0' || arg == '\n'){
arg ^= 's';
arg ^= 'c';
arg ^= 'o';
}
return arg;
}
int main(int argc, char* argv[]){
if(argc != 2){
cerr<<"usage:"<<argv[0]<<" filename";
return -1;
}
ifstream iFile(argv[1],ios::in);
if(!iFile.is_open()){
cerr<<"open file fail";
return -1;
}
ofstream oFile("encrypt.txt",ios::out);
if(!oFile.is_open()){
cerr<<"write file fail";
return -1;
}
char buff[1024] = {0};
while(iFile.getline(buff,sizeof(buff))){
for(int i=0; i<strlen(buff); i++){
buff[i] = encrypt_char(buff[i]);
}
oFile<<buff<<endl;
}
iFile.close();
oFile.close();
return 0;
}
将文件输入程序是加密,将加密后的文件输入程序处理就是解密