使用AES的CBC:在Perl中加密和在Java中解密

时间:2013-08-11 18:52:02

标签: java perl aes cbc-mode

我在perl中加密文件并想在java中解密。这是我的加密代码:

== Perl中的加密==

$key = "1234567890123456";
$plain_text = "this is foo";
open ($fh, ">" . $output_file_path) || die ("open ($output_file_path):$!");
my $cipher = Crypt::CBC->new( -key => $key, -cipher => "Crypt::OpenSSL::AES");
$cipher->start("");
print $fh $cipher->crypt($plain_text);

这是我正在使用的解密代码,但它无效。

== Java中的解密==

String key = "1234567890123456";
byte[] encrypted_bytes = READ_DATA_FROM_FILE
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivSpec = new IvParameterSpec(key.getBytes());
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivSpec);
String plain_text = new String(cipher.doFinal(encrypted_bytes));

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您似乎没有为perl加密指定IV,并且您没有将'encrypt'传递给perl start()方法。那些是我注意到的直接问题。

这可能不是当前的问题,但是使用“非平凡”文本会出现问题:你不小心你的字节< - > java中的char转换(String.getBytes()new String())。您正在使用java中使用默认平台字符编码的方法,这可能不是您想要的。最好使用明确的字符集。