部分测试代码原来是这样的:
int DecryptRelation::AesDecryptFromFileToBytes(const std::string in_file_path, unsigned char *out_data,
const char* aes_encrypt_key, int in_data_chunk_size)
{
ifstream fin(in_file_path, ios::binary);
ofstream fout("c:\\test.txt", ios::binary);
if (!fin)
{
return 1;
}
int out_data_position = 0;
char *in_data = new char[in_data_chunk_size + 1];
char *in_data_tmp = new char[in_data_chunk_size + 1];
while (!fin.eof())
{
fin.read(in_data, in_data_chunk_size);
if (fin.gcount() >= in_data_chunk_size)
{
AesDecryptBytes((const unsigned char *)in_data, (unsigned char *)in_data_tmp,
aes_encrypt_key, in_data_chunk_size);
for (int in_data_tmp_position = 0; in_data_tmp_position < fin.gcount(); in_data_tmp_position++)
{
out_data[out_data_position++] = in_data_tmp[in_data_tmp_position];
}
}
else
{
for (int in_data_tmp_position = 0; in_data_tmp_position < fin.gcount(); in_data_tmp_position++)
{
out_data[out_data_position++] = in_data[in_data_tmp_position];
}
}
}
int str_length = strlen((const char *)out_data);
fout.write((const char *)out_data, str_length);
fout.close();
// 测试写到文件中
fin.close();
RELESE_ARRAY(in_data);
RELESE_ARRAY(in_data_tmp);
if (out_data_position == 0)
{
return 1;
}
return 0;
}
注意这里:
int str_length = strlen((const char *)out_data);
fout.write((const char *)out_data, str_length);
fout.close();
查看c盘对应的文件大小只有:
当时居然没发现,文件里面带有\0导致的问题。。
做个测试,发现还真是这样。。
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
#include "fstream"
#include "decrypt_relation.h"
#include "TxtAndFlashDecryptShow.h"
void Test(unsigned char* in_data)
{
int str_length = strlen((const char *)in_data);
printf("Test----------%s\n", in_data);
printf("Test----------%d\n", str_length);
}
int _tmain(int argc, _TCHAR* argv[])
{
// ifstream fin("1.txt", ios::binary);
// fin.seekg(0, ios::end);
// int file_length = fin.tellg();
// fin.close();
//
// char *test = new char[file_length];
//
// DecryptRelation::AesDecryptFromFileToBytes("2.txt", (unsigned char *)test,
// "0123456789abcdef0123456789abcdee");
//
// printf("file str length is : %d\n", strlen(test));
//
// if (test)
// {
// delete test;
// test = NULL;
// }
TxtAndFlashDecryptShow *test = new TxtAndFlashDecryptShow();
test->ParaseText("2.txt", "0123456789abcdef0123456789abcdee", "");
char* str_point = new char[100];
strcpy(str_point, "zeg\0test");
printf("main---------%s\n", str_point);
printf("main---------%d\n", strlen((const char *)str_point));
Test((unsigned char*)str_point);
// char *test = "zengraoli";
// printf("%d\n", strlen(test));
// ofstream fout("2.txt", ios::binary);
// fout.write(test, strlen(test));
// printf("file str length is : %d\n", strlen(test->GetOutData()));
return 0;
}
完了完了,这么基础的问题都忘了。。