我正在嘗試將AES密鑰寫入文件,稍後再讀取它。我正在使用Crypto ++庫,並且AES密鑰被初始化如下。以下,byte
是unsigned char
的類型定義。如何在文件中讀寫AES密鑰?
byte key[CryptoPP::AES::MAX_KEYLENGTH]
密鑰長度爲32個字節。我嘗試它被寫入到這個文件:
FILE* file = fopen("C:\\key", "wb");
fwrite(key, 1, sizeof(key), file);
fclose(file);
而且使用恢復它:
FILE* read_file = fopen("C:\\key", "rb");
fseek(read_file, 0, SEEK_END);
long int size = ftell(read_file);
fclose(read_file);
read_file = fopen("C:\\key", "rb");
unsigned char * in = (unsigned char *)malloc(size);
byte readed_key = fread(in, sizeof(unsigned char), size, read_file);
fclose(read_file);
if (key == readed_key)
{
cout << "this is the right key !";
}
free(in);
不過,我得到一個錯誤信息:
不兼容的操作數類型:字節*和字節。
我不明白爲什麼,因爲readed_key
和key
與byte
而不是byte*
初始化。
我看着AES的加密+維基,關鍵是如下產生。我想通了,我只是創建密鑰(不產生它):
SecByteBlock key(0x00, AES::MAX_KEYLENGTH);
rnd.GenerateBlock(key, key.size());
有了,我不能用
std::vector<byte> key(32);
rnd.GenerateBlock(key, key.size());
因爲rnd.Generateblock
不能轉換std::vector<byte> into byte*
這是讓我發瘋......
您應該避免'FILE *';並堅持使用C++並使用'ifstream'。或者,使用Crypto ++ ['FileSource'](https://www.cryptopp.com/wiki/FileSource)。另請參閱Crypto ++ wiki上的[std :: byte](https://www.cryptopp.com/wiki/Std::byte)和[Issue 442,Test C++ 17字節更改(來自各個項目的幹運行)]( https://github.com/weidai11/cryptopp/issues/442)在問題跟蹤。 'byte'正準備轉換到'CryptoPP :: byte'。 – jww
[如何將二進制文件讀入無符號字符向量](https://stackoverflow.com/q/15138353),[將文件加載到向量](https://stackoverflow.com/ q/7241871),[將文件讀入std :: vector的有效方法?](https://stackoverflow.com/q/4761529/608639),[正確讀取和寫入std :: vector到文件中使用迭代器](https://stackoverflow.com/q/36506297),[正確讀取和寫入std :: vector到文件中](https://stackoverflow.com/q/12372531),[如何讀取文件到C++中的矢量?](https://stackoverflow.com/q/15138785)等 –
jww