Znalazłem w internecie przykładowy kod, przerobiłem go tylko na aplikację okienkową i przy próbie kompilacji otrzymuję informację o błędzie. Program kompiluję na C++ Builder 2007, a bibliotekę kompilowałem na MS Visual C++ 2005, nie wiem, czy ma to jakieś znaczenie. Mam też błąd w jednej linii (jest zaznaczone w kodzie).
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit1.h"
#include "cryptopp/ecp.h"
#include "cryptopp/modes.h"
#include "cryptopp/filters.h"
#include "cryptopp/files.h"
#include "cryptopp/sha.h"
#include "cryptopp/modes.h"
#include "cryptopp/aes.h"
#include "cryptopp/osrng.h"
using namespace CryptoPP;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
// Crypto++ Library
#ifdef _DEBUG
# pragma comment(lib, "cryptopp/cryptlib/Debug/cryptlib")
#else
# pragma comment(lib, "cryptopp/cryptlib/Release/cryptlib")
#endif
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenDialog1->Execute();
Edit1->Text = OpenDialog1->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
byte iv[AES::BLOCKSIZE];//wektor inicjujacy
byte block[AES::BLOCKSIZE];//bufor na specjalne cele
byte pass[SHA256::DIGESTSIZE];//"hash'owane" haslo
String file, password;
password = Edit2->Text;
//wylicza skrot SHA-2 dla hasla
delete new StringSource(password, true, new HashFilter(*(new SHA256), new ArraySink(pass,SHA256::DIGESTSIZE))); //TU TEŻ JEST JAKIŚ BŁĄD
AutoSeededRandomPool *rng;
rng = new AutoSeededRandomPool; //generator liczb losowych
rng->GenerateBlock(iv, AES::BLOCKSIZE);
StreamTransformationFilter *encryptor;
encryptor = new StreamTransformationFilter(*new CBC_Mode::Encryption(pass, AES::DEFAULT_KEYLENGTH, iv), new FileSink( (Edit1->Text+".aes").c_str() ));
//budujemy naglowek zaszyfrowanego pliku
rng->GenerateBlock(block, AES::BLOCKSIZE);
encryptor->Put(block, AES::BLOCKSIZE);//1 blok specjalny
rng->GenerateBlock(block, AES::BLOCKSIZE);
encryptor->Put(block, AES::BLOCKSIZE);//2 blok specjalny
encryptor->Put(block, AES::BLOCKSIZE);//3 blok specjalny
delete rng;
//WLASCIWE SZYFROWANIE:
//podlaczenie pliku wejsciowego do obiektu szyfrujacego i
//zaszyfrowanie całości do nowego pliku
delete new FileSource(Edit1->Text.c_str(), true, encryptor);
}
//---------------------------------------------------------------------------
Błąd wygląda tak (przy Debug inny niż przy Release):
Build Debug
[ILINK32 Error] Error: 'D:\DOKUMENTY\RAD STUDIO\PROJECTS\ENC\CRYPTOPP\CRYPTLIB\DEBUG\CRYPTLIB.OBJ' contains invalid OMF record, type 0x4c (possibly COFF)
Build Release
[ILINK32 Error] Error: Error processing module D:\DOKUMENTY\RAD STUDIO\PROJECTS\ENC\CRYPTOPP\CRYPTLIB\RELEASE\CRYPTLIB.OBJ
Pliki cryptlib.lib i cryptlib.obj istnieją w podanych folderach.
Programu nie da się skompilować też na DevCpp jako aplikacja konsolowa.