Java中的AES加密与PHP不同

时间:2015-06-11 21:54:44

标签: java php encryption

我一直在做很多搜索,但找不到足够的解释为什么:

public class encryption_test {

    private static final String text_encoding = "UTF-8";

    private byte [] byte_array (String input) throws Exception {
        return input.getBytes (text_encoding);
    }// byte_array;

    private byte [] encrypt (String text) throws Exception {
        Cipher cypher = Cipher.getInstance ("AES/CBC/PKCS5Padding");
        Key key = new SecretKeySpec (byte_array ("12345678123456781234567812345678"), "AES");
        cypher.init (Cipher.ENCRYPT_MODE, key, new IvParameterSpec (byte_array ("1234567812345678")));
        return cypher.doFinal (byte_array (text));
    }// encrypt;

    public String doit () throws Exception {
        byte [] etext = encrypt ("this is a plain string.");
        return new String (Base64.getEncoder ().encode (etext));        
    }// doit;

}// encryption_test;

在Java中,产量:

dAza6vYiYzJ9W/i4zPHVfvA8UUyw8Sq1g2YjuLt3EjI=

鉴于:

base64_encode (mcrypt_encrypt (MCRYPT_RIJNDAEL_128, "12345678123456781234567812345678", "This is a plain string.", MCRYPT_MODE_CBC, "1234567812345678"))
PHP中的

产生:

G+tdEOfQTtVCQGxW3N5uzkqN207OyfIPxS6zf2xrKKY=

根据我在论坛中阅读的所有内容,他们都应该返回相同的内容。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

您的测试字符串不同。在Java中,你把“这是一个普通的字符串。”。在PHP中,你把“这是一个普通的字符串。”。注意首都'T'。

请调整并重试。