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.
-~----------~----~----~----~------~----~------~--~---

Reply via email to