I am running qt 4.6,mingw compiler
windows 7
cryptopp 5.5.2 version

The file was corrupted in a way that i decrypted that the image only
top part of it was decrypted right(1/7th part of image form top
recovered)(total image size7 kb) rest was blank

on bigger images it corrupted


I am not much in security i just wanted to pass infile outfile
password and it should returned encrypted file and decvrypted file, i
am trying to do that with aes , des ,triple des blowfish


for aes

i tried this link, its the code for aes file encryption and this is
working very good with full decryption
http://swarmapps.wordpress.com/2009/11/24/a-simplification-wrapper-for-the-crypto-library/

if you can tell me how to convert this for blowfish , this might help
i need not dwelve into much details


Thank you for your reply


On Sep 11, 11:11 am, GrimReaper <[email protected]> wrote:
> exception is thrown that decryption failed
>
> i tried with small files(1kb or less it worked like a charm)
>
> but size greater than that failed , with throwing exception that
> decryption failed
>
> On Sep 10, 10:38 pm, Mike Hamburg <[email protected]> wrote:
>
> > grimreaper,
>
> > We can probably help you on this list, but you'll need to provide more
> > information than this.  The code that was provided ought to work equally
> > well for text and binary, so let's try to figure out what's wrong with
> > your example.
>
> > In what way does decryption fail?
>
> > Does it throw an exception?  What exception?
>
> > Does it produce a corrupt file?  In what way is the file corrupt?  (That
> > is, in what way is it different from the original file?)  Does it have
> > its CR's replaced with CRLF's?  Does it have null bytes removed?  Is it
> > the same size or a different size?  Does it have random junk at the
> > beginning or end?  Does it fail in the same way every time, or does it
> > depend on the random "IV" block?  Does the output file just have the
> > wrong extension (.txt) for your OS to open it?
>
> > What OS are you running (Windows, right?  What version?), and what
> > version of Crypto++?
>
> > Cheers,
> > MikeOn Fri, 2010-09-10 at 00:45 -0700, grimreaper wrote:
>
> > > Mouse-2 wrote:
>
> > > > #include <iostream>
>
> > > > #include <cryptopp/aes.h>
> > > > #include <cryptopp/modes.h>
> > > > #include <cryptopp/sha.h>
> > > > #include <cryptopp/osrng.h>
> > > > #include <cryptopp/files.h>
> > > > #include <cryptopp/filters.h>
>
> > > > USING_NAMESPACE(CryptoPP);
> > > > USING_NAMESPACE(std);
>
> > > > /**************************************************************/
> > > >   /* Code to illustrate usage of cryptographic primitives     */
> > > >   /* provided by Crypto++ library v5.5.1 of Wei Dai.          */
> > > >   /*                                                          */
> > > >   /* In particular, the program provides two functions:       */
> > > >   /*                                                          */
> > > >   /* 1. Encrypt a file (key based on password) with random IV;*/
> > > >   /*                                                          */
> > > >   /* 2. Decrypt previously encrypted file.                    */
> > > >   /*                                                          */
> > > >   /* Issue with the original code:                            */
> > > >   /*     - set IV in the encryptor but also used it as random */
> > > >   /*       prefix, so garbage was the 1st encrypted block;    */
> > > >   /*     - did not "fast-forward" the encrypted file past the */
> > > >   /*       first block (which was encrypted random garbage).  */
> > > >   /*                                                          */
> > > >   /* Corrections performed:                                   */
> > > >   /*     - fixed encryptor by leaving random block prefixed,  */
> > > >   /*       but removing redundancy (having it in encryptor);  */
> > > >   /*     - fixed decryptor (see the source code).             */
> > > >   /*                                                          */
> > > >   /*==========================================================*/
> > > >   /* Written by:                                              */
> > > >   /*                   Rash <[email protected]>            */
> > > >   /*                                                          */
> > > >   /* Modified by:                                             */
> > > >   /*                   Mouse <[email protected]>        */
> > > >   /*                   Sun Sep 2, 12:25:00 2007               */
> > > >   /*                                                          */
> > > >   /************************************************************/
> > > >   /*                                                          */
> > > >   /* Copyright (C) 2007 Rash  <[email protected]>          */
> > > >   /* Copyright (C) 2007 Mouse <[email protected]>       */
> > > >   /*                                                          */
> > > >   /************************************************************/
>
> > > > void encryptFile(const char* password, const char* inputFileName,
> > > >                const char* outputFileName)
> > > > {
> > > >   byte pass[AES::BLOCKSIZE];  // digest of password
> > > >   byte iv[16];                        // Initial Vector (IV),  misused
> > > >                                 // by original author
> > > >   byte true_iv[16];             // real IV used - set to zero
>
> > > >   AutoSeededRandomPool rng;
>
> > > >   // digest password
> > > >   StringSource(password, true,
> > > >              new HashFilter(*(new SHA256),
> > > >                             new ArraySink(pass, AES::BLOCKSIZE)));
>
> > > >   // random Initial Vector
> > > >   rng.GenerateBlock(iv, 16);
> > > >   memset(true_iv, 0, 16);
>
> > > >   // create object for encrypting
> > > >   AES::Encryption aesEncryption(pass,
> > > >                               CryptoPP::AES::DEFAULT_KEYLENGTH);
> > > >   CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption,
> > > >                                                   true_iv);
>
> > > >   StreamTransformationFilter *encryptor;
> > > >   encryptor = new StreamTransformationFilter(cbcEncryption,
> > > >                                            new FileSink(outputFileName) 
> > > > );
>
> > > >   encryptor->Put(iv, 16); // this prefixes the file with random block 
> > > > (not
> > > > IV)
> > > >                  // Cryptographically it is equivalent to IV, so just as
> > > > good
>
> > > >   // "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[16];        // here's 1st problem: AES IV is 16 bytes
> > > >   byte head_file[16]; // so must skip 16 bytes, not 8.
>
> > > >   memset(iv, 0, 16); // very correct - in fact the encryptor prefixes 
> > > > file
> > > >   // with a random block, so no need to pass the IV explicitly.
>
> > > >   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, 16); // does not do anything useful,
> > > > wrong here
> > > >     // We must somehow decrypt 1st block of the input file, without
> > > > sending the
> > > >     // result into the output file.
> > > >     char garbage[16], iv_garbage[16]; // place for IV stuff
> > > >     ifstream inf;
> > > >     inf.open(inputFileName); inf.read(iv_garbage, 16); // absorb random
> > > > prefix
>
> > > >     // Decrypt random prefix (with zero IV) to some dummy buffer to get
> > > >     // (a) decryptor state adjusted to IV, and
> > > >     // (b) file position pointer advanced to the past-IV spot.
> > > >     cbcDecryption.ProcessData((byte *)garbage, (const byte *)iv_garbage,
> > > > 16);
>
> > > >     // NOW can run the decryption engine in "automatic" mode
> > > >     FileSource(inf, true, decryptor);
>
> > > >     inf.close(); // to be nice
> > > >   }
> > > >   catch(CryptoPP::Exception &e)
> > > >     {
> > > >       cerr << "Caught exception during decryption!" << endl;
> > > >       return;
> > > >     }
> > > > }
>
> > > > int main(int argc, char *argv[])
> > > > {
> > > >   const char *pwd  = "not-so-complicated parole";
> > > >   const char *pfn = "plain.txt";
> > > >   const char *cfn = "cipher.dat";
> > > >   const char *ofn = "plain2.txt";
>
> > > >   // Create test plaintext file "plain.txt"
> > > >   ofstream plain;
> > > >   plain.open(pfn);
> > > >   plain << "An excellent test of file encryption techniques.\n";
> > > >   plain << "This test will not demonstrate many tricks though.\n";
> > > >   plain.close();
>
> > > >   // Invoke encryptor to encrypt into "cipher.dat"
> > > >   encryptFile(pwd, pfn, cfn);
>
> > > >   // Invoke decryptor to decrypt into "plain2.txt"
> > > >   decryptFile(pwd, cfn, ofn);
>
> > > >   exit(0);
> > > > }
>
> > > your code is working on text but when i used a binary file like an image 
> > > it
> > > failed
> > > please help
> > > what changes should i make
> > > please reply
> > > thanks in advance
> > > --
> > > View this message in 
> > > context:http://old.nabble.com/Decrypt-file-using-AES%3A%3ACBC-tp12446523p2967...
> > > Sent from the Crypto++ Users mailing list archive at Nabble.com.

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