【发布时间】:2015-02-16 23:11:17
【问题描述】:
所以我试图从一个十六进制文件中读取,修改十六进制值,将新的十六进制值写入一个新文件。然后打开新文件,再次修改十六进制并重写为第三个文件。我正在对十六进制值进行非常简单的加密。
我用来阅读的功能是休闲:
vector<unsigned char> readFile(istream& file){
vector<unsigned char> returnValue;
//grab first 32 values from infile
for(int i = 0; i < 32 && !file.eof(); i++) {
returnValue.push_back(file.get());
}
return returnValue;
}
我用来写的函数是fallows:
void WriteVectorU8(ostream &file, vector<u8> bytes, bool isEncrypt){
for(int i = 0; i < bytes.size(); i++){
u8 byteToWrite = isEncrypt ? encrypt(bytes[i] , curKey[keyPointer]) : decrypt(bytes[i], curKey[keyPointer]);
incKeyPointer();
if(i != 0 && i%2 == 0){
file << " ";
}
file << hex << setw(2) << setfill('0') << int(byteToWrite);
}
file << endl;
}
这是我打开文件的方式:
ofstream outFile;
outFile.open("tempName.bin", ios::binary);
我看到的是我打开的第一个文件被正确读取,即 file.get() 返回一个有效的十六进制值。 这方面的一个例子是文件中的值 48ff,get() 检索 48 十六进制或 72 作为 int。 我还可以看到我的加密文件是以十六进制正确写入的,但是当我去读取我新创建的加密文件时,可以说其中的第一个值是 81a4 我只得到第一个字符,'8'而不是十六进制我期望的值“81”,并且能够从我没有创建的第一个文件中获取。
【问题讨论】:
标签: c++ encryption hex iostream