C++ - 将任何文件的字节读取到无符号字符数组中
C++ - Read the bytes of any file into an unsigned char array
我有一个任务,我必须实现用于AES-128加密的Rijndael算法。我有算法操作,但我没有正确的文件输入/输出。
赋值要求我们使用从命令行传入的参数。在这种情况下,参数将是用户希望加密的特定文件的文件路径。
我的问题是,我不知道如何读取文件的字节并将这些字节存储在数组中以供以后加密。
我尝试使用 ifstream 和 ofstream 打开、读取、写入和关闭文件,它适用于纯文本文件。但是,我需要应用程序将任何文件作为输入。
当我尝试使用带有pdf作为输入的fstream方法时,它会使我的程序崩溃。因此,我现在需要学习如何获取文件的字节,将它们存储在无符号的字符数组中进行加密,然后将它们存储在另一个文件中。这种加密和密文存储过程需要以 16 字节的间隔进行。
下面的实现是我第一次尝试以二进制模式读取文件,然后在二进制模式下写入另一个文件中读取的任何内容。 输出可在十六进制读取器中读取。
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();
}
代码实现无法按预期工作。
任何关于如何解决我的困境的方向将不胜感激。
像你一样,我真的很难找到一种方法来将二进制文件读入字节数组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]);
}
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 无符号字符打印其 ASCII 值
- 字符数组到无符号字符 *
- 是否可以在 c++ 中将两位数保存在无符号字符中