java - Java 中的 AES 加密与 PHP 不同

标签 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=

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

最佳答案

您的测试字符串不同。在Java中,你输入“这是一个纯字符串。”。在 PHP 中,您输入“这是一个纯字符串。”。注意大写“T”。

请调整并重试。

关于java - Java 中的 AES 加密与 PHP 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30792116/

相关文章:

java - 如何替换 arraylist 中包含元素为 stringbuilder 类型的字符串的元素

java - 远程网络服务

php - 如何验证 MySQL 副本?

php - Javascript 重定向 - 用 Php 控制它

php - 使用 Javascript/PHP 验证公钥

java - 密码错误解密java

java - 如何遍历 Camel 体内的嵌套列表?

php - 如何将用户上传文件到我的数据库并发送给登录的特定用户?

java - 将 RSA pem key 字符串转换为 der byte[]

java - 我们如何为供应商创建一个实例,因为它是一个接口(interface)?