问题描述
- RSA加密字节改变,String与byte转出问题
-
代码如下,byte[] bb = bbb.getBytes(); 这个地方,数组bb与mi内容不一致了,导致解密失败 很多字节变为了63 请问怎么解决这个问题?
try {
byte[] tb = ts.getBytes(); //将字符串变为字节数组
byte[] mi = null;
for(int i =0;i<tb.length;i+=64){ //因为不支持117字节以上加密,所以进行分段加密
byte[] doFinal=RSATools.encryptByPublicKey(ArrayUtils.subarray(tb,i,i+64),gy);
mi = ArrayUtils.addAll(mi, doFinal);
}
System.out.println("RSA加密后------------"+new String(mi));String aaa = encryptBASE64(mi); System.out.println("n加密后----" + aaa); String bbb = new String(decryptBASE64(aaa)); System.out.println("n"+bbb); byte[] bb = bbb.getBytes(); byte[] ming = null; for(int i=0;i<bb.length;i+=128){ byte[] doFinal=RSATools.decryptByPrivateKey(ArrayUtils.subarray(bb, i, i+128), sy); ming = ArrayUtils.addAll(ming, doFinal); } System.out.println("解密后----" + new String(ming)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
解决方案
字符串变成字符数组,是否为正确。你需要看看加密需要的数据,跟你输入的字符串类型如何转换
解决方案二:
String bbb = new String(decryptBASE64(aaa));
已经解决,错误在这句话
BASE64还原后变成字符串bbb,bbb再获取字节数组,getbytes() 这里的字节就变了
要直接拿base64还原后的字节数组进行操作 解密就没问题了
谢谢楼上帮忙啦
时间: 2025-01-21 03:04:07