java异常base64_Java和Android之间的错误编码/解码Base64

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

这是我的情况:

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

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

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

这是我的代码:

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

//ENCRYPT

try {

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: b1a2c67c9c3ac8b8508e210cb2ac476999a913b85e283359fd4482d68164c7e9

public 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: b1a2c67c9c3ac8b8508e210cb2ac476999a913b85e283359fd4482d68164c7e9

Encrypt:BG+pFzDgRLhTI44Rj9w3zkTprPqTryOrqP8xfrS7tb5H3e0KGoxyq/e5SngwQeAr91aGBn6jAUNupwqEihYta7epTtpLP84d7LFxgTJs+bsYgu3WskadiLSImjigzLM1g/VgZ2PWk1Y7idAX

Decrypt: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,encryption

来源: https://codeday.me/bug/20190701/1348795.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值