java - OpenSSL 解密返回 false

标签 java php

我尝试在 Java 中加密密码并使用 OpenSLL 在 PHP 中解密。除了 bool(false),我什么也得不到。

这是我的 Java 代码:

private String encryptAES(String text) throws Exception
{
    String key = "something-random";
    SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");

    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    byte[] encrypted = cipher.doFinal(text.getBytes());

    String encrypttext = Base64.encodeToString(encrypted, Base64.URL_SAFE|Base64.NO_WRAP);

    Log.v("ENCRYPTED", encrypttext); // 6sAfStQJ2zNUJLdRgXZsTA==

    return encrypttext;
}

尝试用 PHP 解密密码:

$output = openssl_decrypt("6sAfStQJ2zNUJLdRgXZsTA==", "AES-256-ECB", "something-random");
var_dump($output); // bool(false)

来自 openSLL 的给定错误:

error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt

有人知道怎么回事吗?我试图寻找错误,但一切都与 node.js 有关


根据@RandomSeed 的回答,我将 PHP 代码更改为以下内容:

$output = openssl_decrypt(base64_decode("6sAfStQJ2zNUJLdRgXZsTA=="), "AES-256-ECB", "something-random");

导致错误的地方:

error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length

这个编辑后的解密函数也返回 bool(false)

最佳答案

您的 encrypttext 字符串在 AES 加密后进行了 Base64 编码。你需要 base64_decode()解密前的输入字符串。

关于java - OpenSSL 解密返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33801033/

相关文章:

php - Mysql 分隔符在 mysql 中有效,但在 PHP 中无效

java - 闹钟管理器 日历

java - android ArrayAdapter 要求资源 ID 是微调器中的 TextView

java - 添加 Maven 依赖项时缺少 Artifact 错误

java - ListView 为空时无法添加和编辑单元格

php - MySQL/PHP - 按名称排序,除非是新的

java - quarkus/microprofile 中的组配置

php - PDO 插入不会抛出错误或插入表单数据

javascript - 帖子评论 (PHP)

PHP - 如何将 base_convert() 转换为 base 62