我尝试使用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)