0

我正在用 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));

有人可以帮助我吗?

4

1 回答 1

1

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

这可能不是当前的问题,但对于处理“非平凡”文本将是一个问题:您在 java (String.getBytes()new String()) 中对 byte <-> char 转换不小心。您正在使用 java 中使用默认平台字符编码的方法,这可能不是您想要的。最好使用显式字符集。

于 2013-08-11T19:05:20.613 回答