Я работаю над некоторым программным обеспечением, использующим библиотеку шифрования, основную механику которой я не могу изменить. Когда программа запускается, для генерации открытого и закрытого ключей требуется около 10 минут, что крайне сложно при попытке отладки других частей программного обеспечения. Я хотел бы написать ключи к файлу и прочитать их, чтобы сэкономить время.Запись данных указателя void на файл
Они ключи являются недействительными указатели:
Enc_Key_T secKey = nullptr;
Где Enc_Key_T
определяется как typedef void* Enc_Key_T
код, который я использовал, чтобы попытаться читать и писать ключи выглядит следующим образом (только попытка записать секретный ключ до сих пор):
#ifdef WriteKey
generate_Keys(parameters, &sec_key, &prv_key);
FILE * pFile;
pFile = fopen("sk.bin", "wb");
fwrite(&sec_key, sizeof(Enc_Key_T), sizeof(&sec_key), pFile);
fclose(pFile);
#else
FILE * pFile;
long lSize;
char * buffer;
pFile = fopen("sk.bin", "rb");
if(pFile == NULL)
fileError();
fseek (pFile, 0 , SEEK_END);
lsize = ftell (pFile);
rewind (pFile);
buffer = (char *) malloc (sizeof(char)*lSize);
if(buffer == NULL)
memError();
sec_key = (void *) fread(buffer, 1, lSize, pFile);
fclose(pFile);
free(buffer);
#endif
Когда я пишу файл, он выходит как 64 байтовый файл, но чтение его в указателе секретного ключа устанавливается на адрес памяти с низким значением, что заставляет меня думать, что я делаю что-то неправильно. Я не могу найти примеров того, как это можно сделать. Я даже не уверен, что это возможно, поскольку я не буду создавать какие-либо структуры underling, поэтому я просто пытаюсь выделить некоторую память в месте, указанном указателем.
Можно ли это сделать, не касаясь базовой библиотеки, которая генерирует ключи?
По крайней мере, 'sizeof (& sec_key)' это неправильно. Это должно быть 'sizeof (sec_key)'. –
Вы должны понимать, как хранятся ключи. Прямо сейчас, вы делаете эквивалент попытки копировать что-то, зная только там, где оно есть. Но то, как вы копируете лист бумаги, отличается от того, как вы копируете звук. Вы должны точно знать, что это значит - скопировать, а не только где. –
Скажите, пожалуйста, тип «Enc_Key_T» - это класс или структура или что? Можете ли вы опубликовать свою декларацию, если она у вас есть? sizeof не будет вам полезен, если вы не покажете мне объявление Enc_Key_T –