<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Hi,</p>
<p><br>
</p>
<p>I'm not sure if you have other mitigating code, but I'd be concerned about calling two calls to MD5 on a passphrase a "derived key" - this would be very weak crypto.<br>
</p>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<hr tabindex="-1" style="width: 98%; display: inline-block;">
<div id="divRplyFwdMsg" dir="ltr"><font color="#000000" face="Calibri, sans-serif" style="font-size: 11pt;"><b>From:</b> erlang-questions-bounces@erlang.org <erlang-questions-bounces@erlang.org> on behalf of Bogdan Andu <bog495@gmail.com><br>
<b>Sent:</b> Wednesday, 11 November 2015 12:51 AM<br>
<b>To:</b> Dmitry Kolesnikov<br>
<b>Cc:</b> Erlang<br>
<b>Subject:</b> Re: [erlang-questions] blowfish cbc mode decrypt</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div>
<div>
<div>
<div>
<div>
<div>
<div>I was thinking that is handled internally...<br>
<br>
</div>
however, this did the trick (for randomiv mode of operation):<br>
<br>
blowfish_key_from_key(Key) -><br>
    Temp = crypto:md5(Key),<br>
    blowfish_key_from_key1(Temp).<br>
<br>
blowfish_key_from_key1(Temp) when size(Temp) < 56 -><br>
    Temp1 = crypto:md5(Temp),<br>
    blowfish_key_from_key1(<<Temp/binary, Temp1/binary>>);<br>
<br>
blowfish_key_from_key1(Temp) -> <br>
    <<Temp1:56/binary, _Rest/bitstring>> = Temp,<br>
    Temp1.<br>
<br>
</div>
I think that crypto should have this kind oh helper functions<br>
</div>
because , like in cases of blowfish cipher , whose key length can<br>
</div>
be variable, could be useful in using the cipher correctly, and people <br>
</div>
would know that some things are not implied.<br>
<br>
</div>
Thanks,<br>
</div>
Bogdan<br>
<div>
<div>
<div>
<div>
<div>
<div>
<div><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Tue, Nov 10, 2015 at 1:15 PM, Dmitry Kolesnikov <span dir="ltr">
<<a href="mailto:dmkolesnikov@gmail.com" target="_blank">dmkolesnikov@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;">
Hello,<br>
<br>
Yes, this want I thought. You are using wrong key to decrypt data on Erlang side.<br>
<br>
Please notice that<br>
<br>
“Crypt::CBC can derive the key and the IV from a passphrase that you provide, or can let you specify the true key and IV manually…<br>
<br>
The -key argument provides either a passphrase to use to generate the encryption key, or the literal value of the block cipher key. If used in passphrase mode (which is the default), -key can be any number of characters; the actual key will be derived by passing
 the passphrase through a series of MD5 hash operations.”<br>
<br>
So, in your example Key is not an encryption key, this is a pass-phrase. The Erlang’s implementation expects that you provides actual key.<br>
<br>
I do not know how perl’s Crypt::CBC derives the key from perspires. You can either reverse engineer that piece of code or you can use literal key.<br>
<br>
<br>
Best Regards,<br>
Dmitry<br>
<div class="HOEnZb">
<div class="h5"><br>
<br>
> On Nov 10, 2015, at 11:58 AM, Bogdan Andu <<a href="mailto:bog495@gmail.com">bog495@gmail.com</a>> wrote:<br>
><br>
> use strict;<br>
> use warnings;<br>
> use MIME::Base64;<br>
><br>
> use Crypt::CBC;<br>
> #use Digest::HMAC_SHA1 qw(hmac_sha1 hmac_sha1_hex);<br>
> use PHP::Serialization qw(serialize unserialize);<br>
><br>
> my $pt = 'a:10:{s:6:"adresa";s:89:"Address 2 TEST \xc3\x84\xc2\x83\xc3\x83\xc2\xae\xc3\x88\xc2\x99\xc3\x88\xc2\x9b\xc3\x88\xc2\x99\xc3\x88\xc2\x9bbl 7bap 71district XXXBucure\xc3\x88\xc2\x99tiJUDE\xc3\x88\xc2\x9a031905RO";s:4:"info";i:1460382;s:7:"urlback";s:41:"<a href="https://192.162.16.116:8020/snep_response" target="_blank" rel="noreferrer">https://192.162.16.116:8020/snep_response</a>";s:4:"cuip";s:18:"Cererea
 nr 1460382";s:6:"idtaxa";i:5001;s:5:"email";s:16:"<a href="mailto:xxx123@gmail.com">xxx123@gmail.com</a>";s:4:"nume";s:55:"\xc3\x88\xc2\x99 \xc3\x88\xc2\x9b \xc3\x84\xc2\x83 \xc3\x83\xc2\xae \xc3\x83\xc2\xa2 \xc3\x83\xc2\x82 \xc3\x83\xc2\x8e \xc3\x84\xc2\x82
 \xc3\x88\xc2\x98 \xc3\x88\xc2\x9a u\xc3\x83\xc2\xa7";s:3:"cui";s:18:"Cererea nr 1460382";s:9:"idnomunic";i:13;s:4:"suma";d:262.69;}';<br>
><br>
> print $pt, "\n";<br>
><br>
> my $key = "12345678900987654321001234567890";<br>
> my $cipher = Crypt::CBC->new(<br>
>                    -key    => $key,<br>
>                 -cipher => 'Blowfish',<br>
>                 -header => 'randomiv'<br>
> );<br>
><br>
>         #       print "$pt\n";<br>
> my $encpt = $cipher->encrypt($pt);<br>
> print "\n$encpt", "\n";<br>
><br>
> print "\n", encode_base64($encpt), "\n";<br>
><br>
> ## TEST<br>
> my $decpt = $cipher->decrypt($encpt);<br>
> print "\n$decpt", "\n";<br>
<br>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</body>
</html>