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