Please disregard this, I've made a glaring error in the perl script 
omitting the -cipher option, no idea what it uses for default.

On Friday, 26 October 2012 11:30:56 UTC+10, Troy wrote:
>
> Hello,
>
> I have been trying to figure out how to get decrypting of text in perl 
> working in crypto++ (and possibly the reverse).
>
> #!/usr/bin/perl
>
> use Crypt::CBC;
> $iv = "12345678";
> $cipher = Crypt::CBC->new( -literal_iv => 1, -literal_key => 1, -key => 
> "wowsers ", -iv => $iv, -header => "none");
>
> $plaintext = "my message";
>
> $ciphertext = $cipher->encrypt_hex($plaintext);
>
> $hex_iv = unpack('H*', $iv);
>
> print "$hex_iv$ciphertext\n";
>
> $plaintext = $cipher->decrypt_hex($ciphertext);
>
> print "$plaintext\n";
>
> As per the options enabled in perl, I have disabled all of the default 
> features and am trying to get it working with a literal key and literal iv 
> (which is being prepended to the output.
>
> I am then failing to decrypt the message using the following crypto++ code:
>
>     void prepare_key(std::string& key)
>     {
>       ssize_t len = static_cast<ssize_t>(key.length());
>       if (len < Blowfish::MIN_KEYLENGTH)
>         key.append(Blowfish::MIN_KEYLENGTH - len, ' ');
>       else
>       if (len > Blowfish::MAX_KEYLENGTH)
>         key.erase(Blowfish::MIN_KEYLENGTH);
>       else
>       {
>         size_t remainder = len % Blowfish::BLOCKSIZE;
>         if (remainder) key.append(Blowfish::BLOCKSIZE - remainder, ' ');
>       }
>     }
>   
>     bool encrypt(const std::string& source,
>                  std::string& dest,
>                  std::string key)
>     {
>       prepare_key(key);
>       
>       AutoSeededRandomPool prng;
>       byte iv[Blowfish::BLOCKSIZE];
>       prng.GenerateBlock(iv, sizeof(iv));
>
>       dest.clear();
>       try
>       {
>         CBC_Mode<Blowfish>::Encryption e;
>         e.SetKeyWithIV(reinterpret_cast<const byte*>(key.c_str()), 
> key.length(), iv);
>         
>         StringSource(source, true,
>             new StreamTransformationFilter(e,
>                 new StringSink(dest)
>             )
>         );
>       }
>       catch (const Exception& e)
>       {
>         return false;
>       }
>
>       dest.insert(dest.begin(), std::begin(iv), std::end(iv));
>       
>       return true;
>     }
>   
>     bool decrypt(std::string source, std::string& dest, std::string key)
>     {
>       prepare_key(key);
>       
>       AutoSeededRandomPool prng;
>       byte iv[Blowfish::BLOCKSIZE];
>       std::memcpy(iv, &source[0], sizeof(iv));
>       source.erase(0, sizeof(iv));
>       
>       dest.clear();
>       try
>       {
>         CBC_Mode<Blowfish>::Decryption d;
>         d.SetKeyWithIV(reinterpret_cast<const byte*>(key.c_str()), 
> key.length(), iv);
>         
>         StringSource(source, true,
>             new StreamTransformationFilter(d,
>                 new StringSink(dest)
>             )
>         );
>       }
>       catch (const Exception& e)
>       {
>         return false;
>       }
>        
>       return true;
>     }  
>
> The crypto++ based encrypt / decrypt functions work fine with eachother. 
> If I attempt to encrypt the same message as in the perl script with the 
> same key and iv, the result is different.
>
> Any help much appreciated!
> Troy
>
>

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