在Java中的RSA加解密问题

窝鹏偏逢连夜雪 2010-08-12 05:47:04
不耽误各位时间,我就开门见山了哈~
明文是一个长度为50000的byte[]数组,RSA算法中用到了bcprov-jdk16-144.jar这个包,具体算法就是常规的那几步,就不在这里列出来了,跟网上别人写的都差不多。
可是奇怪的是加密完再解密后这个数组的长度就变化了。。内容也“不完全”一样,总是少几个byte。而且明文不同,解密后丢失的长度也不尽相同,有些只少了一两个byte,有些甚至少了上百了byte
小弟不才,实在想不通为什么加密完再解密后居然跟原来的数组不一样。。
请问有没有哪位高人遇到过同样的问题?求指点。。
...全文
83 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bao110908 的回复:]
你用的 RSA 是多少位的?对于 RSA 来说原文长度是有限制的。
[/Quote]
我用的是1024位的RSA密钥。
我也在网上看到有说只能加密117字节的分组,但是只要分开不就行了么?这个分组数量难道还有限制么?
奋斗并快乐着 2010-08-13
  • 打赏
  • 举报
回复
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(1024);
KeyPair keyPair = keyPairGen.generateKeyPair();
setPrivateKey(keyPair.getPrivate());
RSAPublicKey pubKey = (RSAPublicKey) keyPair.getPublic();

key是这么产生的
奋斗并快乐着 2010-08-13
  • 打赏
  • 举报
回复
这是我项目中用过的 没有出现什么问题 希望有所帮助
奋斗并快乐着 2010-08-13
  • 打赏
  • 举报
回复
  public byte[] privateKeyDecrypt(byte[] aBytes) throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, getPrivateKey());
ByteBuffer tempBuffer = ByteBuffer.allocate(aBytes.length);
byte[] result;
int iOffset = 0;
int iLength = 0;
while (iOffset < aBytes.length) {
iLength = aBytes.length - iOffset;
if(iLength > 128){
iLength = 128;
}
result = cipher.doFinal(aBytes, iOffset, iLength);
tempBuffer.put(result);
iOffset += 128;
}
tempBuffer.flip();
byte[] finalBytes = new byte[tempBuffer.remaining()];
tempBuffer.get(finalBytes);
return finalBytes;
}
  • 打赏
  • 举报
回复
唉。。又是这样。。现在csdn怎么这么不活跃呢
  • 打赏
  • 举报
回复
你用的 RSA 是多少位的?对于 RSA 来说原文长度是有限制的。
hjjk123 2010-08-12
  • 打赏
  • 举报
回复
没有用过 帮你顶吧!!!

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧