我尝试在 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/