Java和Android之间的错误编码解码Base64

Java和Android之间的错误编码解码Base64,第1张

概述正如我的问题,当我在Java和Android之间编码/解码Base64时,我遇到了一个大问题.这是我的情况:我在Java上使用ECC编写代码来加密/解密,mycode工作得非常好.然后我尝试在Java上加密字符串并在Android上解密这个加密的字符串,它失败了.我认为问题可能是编码/解码Base64.这是我的代

正如我的问题,当我在Java和Android之间编码/解码Base64时,我遇到了一个大问题.

这是我的情况:

我在Java上使用ECC编写代码来加密/解密,mycode工作得非常好.

然后我尝试在Java上加密字符串并在AndroID上解密这个加密的字符串,它失败了.

我认为问题可能是编码/解码Base64.

这是我的代码:

1 /仅在Java上加密/解密:

  //ENCRYPTtry {        Cipher c = Cipher.getInstance("ECIES",BouncyCastleProvIDer.PROVIDER_name);        c.init(Cipher.ENCRYPT_MODE,publicKey);        encodeBytes = c.doFinal(origin.getBytes());        String encrypt = Base64.getEncoder().encodetoString(encodeBytes);        System.out.println("Encrypt:"+ encrypt+"\n");    } catch (Exception e) {        e.printstacktrace();    }//////DECRYPT    try    {        String abc = Base64.getDecoder().decode(encrypt);        Cipher c = Cipher.getInstance("ECIES","BC");        c.init(Cipher.DECRYPT_MODE,privateKey);        //decodeBytes = c.doFinal(encodeBytes);        decodeBytes = c.doFinal(abc);        String deCrypt = new String(decodeBytes,"UTF-8");        System.out.println("Decrypt:"+ deCrypt +"\n");    }    catch (Exception ex)    {        ex.printstacktrace();    }

这是我的结果:

private key: EC Private Key [eb:bc:b0:30:f0:42:4e:f1:0f:c5:6a:49:22:93:51:72:ea:23:0c:9a]        X: c55275cd4a40690ec8d5333cd31994e3066d7f49f57df6c3aed20385c6b50325        Y: b1a2c67c9c3ac8b8508e210cb2ac476999a913b85e283359fd4482d68164c7e9public key: EC Public Key [eb:bc:b0:30:f0:42:4e:f1:0f:c5:6a:49:22:93:51:72:ea:23:0c:9a]        X: c55275cd4a40690ec8d5333cd31994e3066d7f49f57df6c3aed20385c6b50325        Y: b1a2c67c9c3ac8b8508e210cb2ac476999a913b85e283359fd4482d68164c7e9Encrypt:BG+pFzDgRLhTI44Rj9w3zkTprPqTryOrqP8xfrS7tb5H3e0KGoxyq/e5SngwQeAr91aGBn6jAUNupwqEihYta7epTtpLP84d7LFxgTJs+bsYgu3WskadiLSImjigzLM1g/VgZ2PWk1Y7IDAXDecrypt:63B952562----0907888511

然后我在AndroID上编写解密字符串的代码,但AndroID没有这个方法:

Base64.getDecoder().decode(String);

我必须用这个替换它:

byte[] encodeBytes = null;encodeBytes = Base64.encode(my_encrypted_string.getBytes(),Base64.DEFAulT);Cipher c = Cipher.getInstance("ECIES","SC");c.init(Cipher.DECRYPT_MODE,privateKeyFromfile);decodeBytes = c.doFinal(encodeBytes);String deCrypt = new String(decodeBytes,"UTF-8");txtHIDen.setText(deCrypt);Toast.makeText(activity, deCrypt, Toast.LENGTH_SHORT).show();

但它显示了这个错误

10-03 09:50:24.466 13134-13134/com.example.napoleon.luanvana W/System.err: org.spongycastle.jcajce.provIDer.util.BadBlockException: unable to process block

我真的被卡住了.请帮我.
提前致谢.

解决方法:

这似乎是一个简单的错误.
你换了

String abc = Base64.getDecoder().decode(encrypt);

byte[] encodeBytes = null;encodeBytes = Base64.encode(my_encrypted_string.getBytes(),Base64.DEFAulT);

如果我读得正确的话.尝试用decode替换它.

由于密文是Base64编码两次而不是在尝试解密之前解码,因此解密失败并显示您向我们显示的错误.

总结

以上是内存溢出为你收集整理的Java和Android之间的错误编码/解码Base64全部内容,希望文章能够帮你解决Java和Android之间的错误编码/解码Base64所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1118472.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存