Ok here is what I have been trying, Now the problem is I'm unable to
retrieve the first 5 bytes.
If the input is
"The library is an powerful and elegant tool for performing complex
cryptography"
I get the output as
"}ýŸ1/4 tÛ=rary is an powerful and elegant tool for performing complex
cryptography"

Here is what I did. help me to fix this problem
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;

    // digest password
    StringSource( password, true, new HashFilter(*(new SHA256), 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);
}

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
        {
                StringSource( password, true, new HashFilter(*(new SHA256), new
ArraySink(pass,AES::BLOCKSIZE)) );

                CryptoPP::AES::Decryption aesDecryption(pass,
CryptoPP::AES::DEFAULT_KEYLENGTH);
                CryptoPP::CBC_Mode_ExternalCipher::Decryption
cbcDecryption( aesDecryption, iv );

                StreamTransformationFilter *decryptor;
                decryptor = new
StreamTransformationFilter(cbcDecryption, new
FileSink(outputFileName) );
                decryptor->Get( head_file, 8 );

                FileSource(inputFileName, true, decryptor);
        }
        catch(CryptoPP::Exception &e)
        {
                return;
        }
}

On Sep 2, 10:44 am, Rash <[EMAIL PROTECTED]> wrote:
> 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