I tried the following but I get the exception, "ciphertext block is
not a multiple of block size". Please help.
void decryptFile(const char* password, const char*inputFileName,const
char*outputFileName)
{
byte pass[ AES::BLOCKSIZE ];
byte iv[ 8 ];
byte head_file[ 8 ];
memset(iv, 0, 8);
try
{
FileSource source(inputFileName, false);
StringSource( password, true,new HashFilter(*(new MD5), new
ArraySink(pass, AES::BLOCKSIZE)) );
CryptoPP::AES::Decryption aesDecryption(pass,
CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Decryption
cbcDecryption( aesDecryption, iv );
// get and encrypt first block
source.Pump(8);
source.Get(head_file, 8);
// "bind" decryptor to output file
source.Attach( new StreamTransformationFilter(cbcDecryption,
new FileSink((outputFileName) ) ));
// push the rest data
source.PumpAll();
}
catch(CryptoPP::Exception &e)
{
return ;
}
}
Rash wrote:
> Hello All,
> Following are my specifications to encrypt/decrypt files using
> AES::CBC mode
>
> Encrypt process:
> 1) 8 bytes random IV ( Initialization Vector ).
> Insert the 8 bytes random IV to the beginning of the data stream.
>
> 2) Key length with 16 bytes ( digest using MD5 ).
> 3) padding method compatible with RFC 2898.
> 4) Encrypt the file.
>
> Decrypt process:
> 1) Read the first 8 bytes block and ignore it.
> 2) Digest the key using MD5.
> 3) Use the same padding method used when encrypting the file.
> 4) Decrypt the file.
>
> To encrypt the file here is my code
> void encryptFile(const char* password, const char* inputFileName,
> const
> char* outputFileName)
> {
> byte pass[ AES::BLOCKSIZE ]; // digest of password
> byte iv[ 8 ]; // Initial Vector (IV)
>
> AutoSeededRandomPool rng; // random number generator
> try
> {
> // digest password
> StringSource( password, true,new HashFilter(*(new MD5), new
> ArraySink(pass, AES::BLOCKSIZE)) );
>
> // random Initial Vector
> rng.GenerateBlock(iv, 8);
>
> // create object for encrypting
> AES::Encryption aesEncryption(pass,
> CryptoPP::AES::DEFAULT_KEYLENGTH);
> CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption,
> iv);
>
> StreamTransformationFilter *encryptor;
> encryptor = new StreamTransformationFilter(cbcEncryption, new
> FileSink(outputFileName) );
>
> encryptor->Put(iv, 8);
>
> // "bind" a file and encrypt one
> FileSource(inputFileName, true, encryptor);
> }
> catch(CryptoPP::Exception &e)
> {
> return;
> }
> }
> void decryptFile(const char* password, const char*inputFileName,const
> char*outputFileName)
> {
> //help me to write the decrypt functionality
> }
>
> How do I decrypt the file? I'm unable to read the first 8 bytes block
> and ignore it.
> Please help me to write the decrypt function satisfying the above
> specifications.
>
> Thanks in advance
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users"
Google Group.
To unsubscribe, send an email to [EMAIL PROTECTED]
More information about Crypto++ and this group is available at
http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---