我在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));
有人可以帮助我吗?
答案 0 :(得分:1)
您似乎没有为perl加密指定IV,并且您没有将'encrypt'
传递给perl start()
方法。那些是我注意到的直接问题。
这可能不是当前的问题,但是使用“非平凡”文本会出现问题:你不小心你的字节< - > java中的char转换(String.getBytes()
和new String()
)。您正在使用java中使用默认平台字符编码的方法,这可能不是您想要的。最好使用明确的字符集。