java - java中的openssl_encrypt 256 CBC raw_data

标签 java php encryption

我尝试在 java 6 中使用 OPENSSL_RAW_DATA 执行 PHP openssl_encrypt aes-256-cbc,但没有成功。我找到了一些关于此的主题,但我只成功地在没有 raw_data 的 aes-128-cbc 中做到了这一点。我为此建立的最好的主题是:AES-256 CBC encrypt in php and decrypt in Java or vice-versa 但 raw_data 不起作用,256 位 key 是随机生成的。 事实上 PHP 版本是:

<?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,而且我也使用不带参数的getBytes(),因为对于某些 key ,我遇到了有关 key 长度的错误。

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

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

关于java - java中的openssl_encrypt 256 CBC raw_data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44259188/

相关文章:

php - 将负数变为 0 的默认 php 函数

java - 使用 XML 私钥解密 RSA

java - ClassNotFoundException : org. slf4j.LoggerFactory Maven 问题

java - 将 jsp 页面链接到 java 类

java - 从java中的字符串解析带有正/负前缀的数字

java - 有效数字字符串上的 NumberFormatException

ruby - 如何将 SHA1 哈希字符串截断为 32 位字符串

java - 我可以使用 GWT HTTP 请求从网站读取文本文件吗?

PHP openssl_pkcs7_verify 不工作

php - 如何使用mysql从具有父子关系的表中检索数据?