openssl_encrypt java中的256 CBC raw_data

我尝试在java 6中使用OPENSSL_RAW_DATA执行PHP openssl_encrypt aes-256-cbc但没有成功。 我找到了一些关于这个的话题,但我只是在没有raw_data的aes-128-cbc中成功了。 我创建的关于它的最佳主题是: AES-256 CBC在php中加密并在Java中解密,反之亦然但是raw_data不起作用,256位密钥是随机生成的。 实际上Php版本是:

 openssl( "hello", "aes-256-cbc", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", OPENSSL_RAW_DATA, "aaaaaaaaaaaaaaaa" ) ?> 

我实际上有这个:

 public static void main(String[] args) { try { // 128 bits key openssl_encrypt("hello", "bbbbbbbbbbbbbbbb", "aaaaaaaaaaaaaaaa"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static String openssl_encrypt(String data, String strKey, String strIv) throws Exception { Base64 base64 = new Base64(); Cipher ciper = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec key = new SecretKeySpec(strKey.getBytes("UTF-8"), "AES"); IvParameterSpec iv = new IvParameterSpec(strIv.getBytes("UTF-8"), 0, ciper.getBlockSize()); // Encrypt ciper.init(Cipher.ENCRYPT_MODE, key, iv); byte[] encryptedCiperBytes = base64.encode((ciper.doFinal(data.getBytes()))); String s = new String(encryptedCiperBytes); System.out.println("Ciper : " + s); return s; } 

经过一些修改和一些测试我发现它:

 private static String openssl_encrypt(String data, String strKey, String strIv) throws Exception { Base64 base64 = new Base64(); Cipher ciper = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec key = new SecretKeySpec(strKey.getBytes(), "AES"); IvParameterSpec iv = new IvParameterSpec(strIv.getBytes(), 0, ciper.getBlockSize()); // Encrypt ciper.init(Cipher.ENCRYPT_MODE, key, iv); byte[] encryptedCiperBytes = ciper.doFinal(data.getBytes()); String s = new String(encryptedCiperBytes); System.out.println("Ciper : " + s); return s; } 

PHP中的openssl_encrypt不会在base64中转换他的结果,并且我也使用没有param原因的getBytes(),对于某些键,我有一个关于键的lentgh的错误。

所以这个方法做的事情与:

  openssl_encrypt(data, "aes-256-cbc", key, OPENSSL_RAW_DATA, iv); ?>