加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – OpenSSL解密返回false

发布时间:2020-12-15 02:11:29 所属栏目:Java 来源:网络整理
导读:我尝试使用 Java加密密码并使用OpenSLL在 PHP中解密.除了布尔(假),我什么也得不到. 这是我的Java代码: private String encryptAES(String text) throws Exception{ String key = "something-random"; SecretKeySpec skeySpec = new SecretKeySpec(key.getBy
我尝试使用 Java加密密码并使用OpenSLL在 PHP中解密.除了布尔(假),我什么也得不到.

这是我的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=="),"something-random");

这会导致错误:

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

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

解决方法

经过AES加密后,您的encrypttext字符串是Base64编码的.在解密之前,您需要输入 base64_decode()个输入字符串.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读