C++ C++;-将任何文件的字节读入无符号字符数组
我有一个任务,我必须为AES-128加密实现Rijndael算法。我的算法可以运行,但我没有正确的文件输入/输出 分配要求我们使用从命令行传入的参数。在这种情况下,参数将是用户希望加密的特定文件的文件路径 我的问题是,我不知道如何读入文件的字节,并将这些字节存储在数组中以供以后加密 我尝试过使用ifstream和ofstream来打开、读取、写入和关闭文件,对于纯文本文件来说效果很好。但是,我需要应用程序将任何文件作为输入 当我尝试使用带有pdf的fstream作为输入的方法时,它会使我的程序崩溃。因此,我现在需要学习如何获取文件的字节,将它们存储在无符号字符数组中进行加密,然后将它们存储在另一个文件中。加密和存储密文的过程需要以16字节的间隔进行 下面的实现是我第一次尝试以二进制模式读取文件,然后再以二进制模式写入另一个文件中读取的内容。 输出在十六进制读取器中可读C++ C++;-将任何文件的字节读入无符号字符数组,c++,file-io,byte,aes,C++,File Io,Byte,Aes,我有一个任务,我必须为AES-128加密实现Rijndael算法。我的算法可以运行,但我没有正确的文件输入/输出 分配要求我们使用从命令行传入的参数。在这种情况下,参数将是用户希望加密的特定文件的文件路径 我的问题是,我不知道如何读入文件的字节,并将这些字节存储在数组中以供以后加密 我尝试过使用ifstream和ofstream来打开、读取、写入和关闭文件,对于纯文本文件来说效果很好。但是,我需要应用程序将任何文件作为输入 当我尝试使用带有pdf的fstream作为输入的方法时,它会使我的程序崩
int main(int argc, char* argv[])
{
if (argc < 2)
{
cerr << "Use: " << argv[0] << " SOURCE_FILEPATH" << endl << "Ex. \"C\\Users\\Anthony\\Desktop\\test.txt\"\n";
return 1;
}
// Store the Command Line Parameter inside a string
// In this case, a filepath.
string src_fp = argv[1];
string dst_fp = src_fp.substr(0, src_fp.find('.', 0)) + ".enc";
// Open the filepaths in binary mode
ifstream srcF(src_fp, ios::in | ios::binary);
ofstream dstF(dst_fp, ios::out | ios::binary);
// Buffer to handle the input and output.
unsigned char fBuffer[16];
srcF.seekg(0, ios::beg);
while (!srcF.eof())
{
srcF >> fBuffer;
dstF << fBuffer << endl;
}
dstF.close();
srcF.close();
}
intmain(intargc,char*argv[])
{
如果(argc<2)
{
CURR 像你一样,我真的很努力找到一种方法来读取二进制文件到C++中的字节数组,这样就可以输出十六进制编辑器中所看到的相同的十六进制值。经过多次尝试和错误,这似乎是最快的方法,而不需要额外的转换。
如果没有计数器,它会运行得更快,但有时会出现宽字符。为了一次真正获得一个字节,我还没有找到更好的方法
默认情况下,它将整个文件加载到内存中,但只打印前1000个字节
string Filename = "BinaryFile.bin";
FILE* pFile;
pFile = fopen(Filename.c_str(), "rb");
fseek(pFile, 0L, SEEK_END);
size_t size = ftell(pFile);
fseek(pFile, 0L, SEEK_SET);
uint8_t* ByteArray;
ByteArray = new uint8_t[size];
if (pFile != NULL)
{
int counter = 0;
do {
ByteArray[counter] = fgetc(pFile);
counter++;
} while (counter <= size);
fclose(pFile);
}
for (size_t i = 0; i < 800; i++) {
printf("%02X ", ByteArray[i]);
}
string Filename=“BinaryFile.bin”;
文件*pFile;
pFile=fopen(Filename.c_str(),“rb”);
fseek(pFile,0L,SEEK_END);
大小\u t大小=ftell(pFile);
fseek(pFile,0L,SEEK_SET);
uint8_t*ByteArray;
ByteArray=新单元8_t[尺寸];
if(pFile!=NULL)
{
int计数器=0;
做{
ByteArray[计数器]=fgetc(pFile);
计数器++;
}while(请参阅std::ifstream::read()
。以二进制模式打开文件,这样就不会发生翻译。不要使用运算符>>
,因为这是用于文本的;二进制文件(如加密数据)可能包含不可打印的数据。文字无法描述这对我有多大帮助。谢谢托马斯。