in reply to Re: AES Interoperability between Perl and C#
in thread AES Interoperability between Perl and C#
Your code doesn't work if the cleartext is not an exact multiple of 16 bytes in length (and maybe even if it is), because Crypt::Rijndael doesn't handle padding. Crypt::CBC handles that.
Your Perl code manually prepends/extracts the IV to/from the encrypted text. Crypt::CBC handles that.
Crypt::CBC has other features too, such as generating a random IV when so desired.
That's why Crypt::Rijndael should be in conjunction with Crypt::CBC instead of using Crypt::Rijndael's CBC mode.
The fix (and simplification) is:
use strict; use warnings; use MIME::Base64; use Crypt::CBC; my $key = pack("H*", "01020304050607080910111213141516"); my $cipher = Crypt::CBC->new(-cipher => 'Rijndael'); my $in = decode_base64(<>); print "out = '", unpack("N/A", $cipher->decrypt($in)), "'\n";
By the way, I removed use bytes since it was useless since you didn't use any numbers except the constants 0 and 16.
Also, I don't think Crypt::Rijndael's new sets $! (or ever returns false).
(Untested. I don't have these modules.)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: AES Interoperability between Perl and C#
by Thelonius (Priest) on Nov 17, 2005 at 10:23 UTC | |
by ikegami (Patriarch) on Nov 17, 2005 at 22:57 UTC |