OpenSSL解密返回false

时间:2015-11-19 10:19:53

标签: 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)

1 个答案:

答案 0 :(得分:0)

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