Greetings people,

I have a sticky problem with Crypt::Blowfish that has been turning my brain into jelly.

According to the documentation at Crypt::Blowfish at CPAN, when I'm decrypting the encrypted string, I need to have a "chuck" of the data which is exactly 8 bytes in length, and further suggests that using "\0" is an acceptable padding character.

I've written this small snippet, which checks for the length and adds the appopriate characters, then chops it back to an 8 byte chunk, thus:

if (length($in) >= 8) { $in = substr($in,8); } else { $x = "\x00\x00\x00\x00\x00\x00\x00\x00"; $y = $in.$x; $in = substr($y,0,8); print "\nGot to the final part ... length is ".length($in)."\n +"; }
However at run - if the string to be decrypted is not divisable by 8, I get some weird characters appearing on the end, thus:
50 1 Yell=?H?Phf?!O"
is there some other character I should be using here?

Complete code, with three examples of the encrypted data follows:

#!/usr/bin/perl use Crypt::Blowfish; $servername="Richard"; #$tmp="IPPQY%FF%B3M/%u2030%u2014s%FE%07%8D%1E%u201A%C2%D2%FC%09F%u0152 +%07%CF%u2026nO%5B%D3nZ%5B%u02C6%u0152%01%u201D%CDn%7D%7D%u2018F%FB%BA +%F12Fm%CB%CF%E9%F1%7E%u2013%u2026%u201E%1B%7E%04h%18b%1EZ%u0192H%11%1 +1%A6%FEd%0D%60%EB%u0160%23%216F%0C%23%u2020qs%EA%3A%7B%DC%D6W%AF7Y%FE +%B8%0D%60%EB%u0160%23%216Fg%0A%BAL0%06%u203Aa%A0H%F9%u017E%A8%D6UBp%D +B%5DJ%B3%C5%24%BD%E6%25%F0%u203A%14%15O%u017D%u01925h%3F%CE%u2019%15% +AC%90%FAq8p%19%EA%16%DDJf+%u2039%u2122%A6%0A%F8%u20AC%C8%BE%A0%F1%E7% +A0x%7F%A6%C1%E9%CE%0C%C9%EC%06M%u203A%FF%CC%0FU%F0%u017D%07E%04%7E%CD +oK1IGm%0Fvd%DA%8F%F6%u0178%A3%u0178%D3%F8/%A7zc%u02C6q%EFL%15A%27K*%A +4%u201CT%u0178%B2I%04%u0152%8D%02j%B4%B7%u201A%C3%5B%3C%7B%CE%u0152%C +2B%C3%u2039Y%5C%E2pU3F%3B%CA%C7%7DU%D7%B84%A8%A9%u2018%CB%2Cn%3F1%D2% +1E5%00%u203A%26%CC8jwPy%7F%u201D%A1%F8%u2019z%E8_I%D1DW%u201A%08%15C% +u201D%u2019%D9+%EF%04%u203A%B7%ADx%3AK%u0160%F5%ECg9%E8_1%C7%u203AY%0 +1%B2%7BED%29%B9%BB%u20AC"; #$tmp="IPPQY%FF%B3M/%u2030%u2014s%FE%07%8D%1E%D3%27j%C6%CD%3A%u02DC%1B +%1F%3E%FA%28m%DA%07B%F1%7F%03%D3%B78%0C%u2021%D4%A8%E2%AD%0C%17%8FJ%E +A%0E%B5j%u201Cy%u201Ed%F3%u2019%E1%BD%u2013%CF8c5%EA%E8B%B8%A9%17g%0C +%23%u2020qs%EA%3A%7B%C4%D3%3E%0E%12%0ClnT%3F%1B%24%FC%B9c%C7%14%F5%F0 +%BF%29%A3%C6%u0160"; $tmp="IPPQY%FF%B3M/%u2030%u2014s%FE%07%8D%1E%u201A%C2%D2%FC%09F%u0152% +07%CF%u2026nO%5B%D3nZ%5B%u02C6%u0152%01%u201D%CDn%7D%7D%u2018F%FB%BA% +F12Fm%CB%CF%E9%F1%7E%u2013%u2026%u201E%1B%7E%04h%18b%1EZ%u0192H%11%11 +%A6%FEd%0D%60%EB%u0160%23%216F%0C%23%u2020qs%EA%3A%7B%DC%D6W%AF7Y%FE% +B8%0D%60%EB%u0160%23%216Fg%0A%BAL0%06%u203Aa%A0H%F9%u017E%A8%D6UBt%F4 +%FAT1%A0%u0178%FC%F0%0El%00%DA%D2%5C%DD%AA%26%7B%20%26%DC%3D%13%07%DE +1%26%CD%CF%B5%EC%AF%09%10%20LkU%CC%05%E6AgD-N%FB%D9%B0%5B%11o%7D%B4%E +4%11%F8%13%EAUN%10%u02DC%u201E%u2122i%A2U%0B@%08I%24%C6%04%BB%8Dh%D1% +0A%F4%7C%AF%3A%FD%B7l%D6%u2026%CDt%D5%5B%B4%u201EW%B6NX%C8%0A%A7%F6%D +4%B2%07C%0A%3C8%B1%26%D2%EF%E19%17%5D%AF%05%u2122%F1bE%23%u2019%u2020 +%E0%E8%A8%B3%3B%u2026h%E8%5B%u0152%C2%25%B8%DA%27%B5%07%02R%DAC%B8E%u +2039%D6%01D%u0160%BC%0Au%1F%u2013p%F75%8F%01%1A%E81h%B9%90%u017D%A1%9 +0%FAR%11%EA%u2122%12%DF@FP%7DYY%B2%217V%14%F5%F0%BF%29%A3%C6%u0160"; &mime_hex_swap; &key; $cipher = new Crypt::Blowfish $key; &unencrypt; open (FILE,">file.txt"); print FILE "\n\nText is now \"".$tmp."\"\n"; close(FILE); print "\n\nText is now \"".$tmp."\"\n"; exit(); sub mime_hex_swap { # wierd shite characters (ISO Latin-1) $tmp =~ s/\%u20AC/\%80/gi; $tmp =~ s/\%u201A/\%82/gi; $tmp =~ s/\%u0192/\%83/gi; $tmp =~ s/\%u201E/\%84/gi; $tmp =~ s/\%u2026/\%85/gi; $tmp =~ s/\%u2020/\%86/gi; $tmp =~ s/\%u2021/\%87/gi; $tmp =~ s/\%u02C6/\%88/gi; $tmp =~ s/\%u2030/\%89/gi; $tmp =~ s/\%u0160/\%8A/gi; $tmp =~ s/\%u2039/\%8B/gi; $tmp =~ s/\%u0152/\%8C/gi; $tmp =~ s/\%u017D/\%8E/gi; $tmp =~ s/\%u2018/\%91/gi; $tmp =~ s/\%u2019/\%92/gi; $tmp =~ s/\%u201C/\%93/gi; $tmp =~ s/\%u201D/\%94/gi; $tmp =~ s/\%u2022/\%95/gi; $tmp =~ s/\%u2013/\%96/gi; $tmp =~ s/\%u2014/\%97/gi; $tmp =~ s/\%u02DC/\%98/gi; $tmp =~ s/\%u2122/\%99/gi; $tmp =~ s/\%u0161/\%9A/gi; $tmp =~ s/\%u203A/\%9B/gi; $tmp =~ s/\%u0153/\%9C/gi; $tmp =~ s/\%u017E/\%9E/gi; $tmp =~ s/\%u0178/\%9F/gi; $tmp =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; print "length is now ".length($tmp)."\n"; } sub key { $tmp2 = $key = $len = $tmpkey = ""; $tmpkey = "AMIPS".$servername."".length($servername); for ($keykeeper=length($tmpkey);$keykeeper>-1;$keykeeper--) { $tmp2 .= substr($tmpkey, $keykeeper, 1); } $key = $tmpkey.$tmp2; } sub unencrypt { $in = $tmp; $newlength = length($in); print $newlength."\n"; while (length($in) > 0) { $temp2_data = substr($in,0,8); if (length $temp2_data == 8) { $temp3_data = $cipher->decrypt($temp2_data); $decrypt_data .= $temp3_data; print "."; } if (length($in) >= 8) { $in = substr($in,8); } else { $x = "\x00\x00\x00\x00\x00\x00\x00\x00"; $y = $in.$x; $in = substr($y,0,8); print "\nGot to the final part ... length is ".length($in)."\n +"; } } $tmp = $decrypt_data; #if ($DIAG) { print LOG "\nDecrypted data MIME[".$local_counter."] ( +".$newlength."bytes) : ".$decrypt_data; } }
Thanks

Richard

Edit by tye, formatting, add READMORE tags


In reply to Blowfish decryption problem by richard_mortimer

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.