RSA算法加密问题

happy002 2011-02-24 09:06:08
代码:

KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
KeyPair key=keyGen.generateKeyPair();
PublicKey pub_key = key.getPublic();
PrivateKey pri_key = key.getPrivate();

这种获取密钥的方式,在公钥加密的时候,如果需要加密的文件比较大怎么处理?比如10M左右的?

// 读入需加密文件
File file = new File(infoPath);
FileInputStream is = new FileInputStream(file);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] tmpbuf = new byte[1024];
int count = 0;
while ((count = is.read(tmpbuf)) != -1){
bout.write(tmpbuf, 0, count);
tmpbuf = new byte[1024];
}
is.close();
// 加密
Cipher cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE,pubkey);
byte[] cipherText=cipher.doFinal(bout.toString().getBytes());
// 生成加密后文件
if(retPath==null || retPath.equals("")){
retPath = infoPath + ".enc";
}
file = new File(retPath);
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(cipherText);
out.close();


这个时候如果文件内容很少的情况可以通过修改key长度等实现加密,但如果文件比较大的时候怎么办?除了循环取出加密之外有什么别的方法?
或者哪位能给一个别的可以实现大文件公钥加密的例子?谢谢~
...全文
93 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
happy002 2011-02-25
  • 打赏
  • 举报
回复
迷糊,犯了这么个低级错误,还用byte数组转string呢,真晕!谢谢火龙果
happy002 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bao110908 的回复:]
快多少的话网上有得是比较!

块加密、流加密都是使用字节来处理的,不管什么文件都可以弄成字节。

另外,J2SE 的 API 中有 javax.crypto.CipherInputStream 和 javax.crypto.CipherOutputStream 就是用来加密数据流的。
[/Quote]

我现在在读取文件的时候出现了一个问题,如果是1个jpg文件,本来是74558字节的,但是我读过来之后
  	      System.out.println(bout.toString().getBytes().length);
打印出来的结果是68845,丢失了1部分数据,这个是怎么回事呢?
谢谢啊~
  • 打赏
  • 举报
回复
非对称加密算法所能处理的明文大小是由其自身的非对称性所决定的了。

非对称加密算法所能处理的明文大小是有限制的,这是由其自身的非对称性所决定的了。
  • 打赏
  • 举报
回复
RSA 1024 只能处理 117 个字节(1024 / 8 - 11)的数据。

非对称加密算法所能处理的明文大小是由其自身的非对称性所决定的了。

一般不会使用 RSA 直接去加密数据,而是由对称加密算法去加密数据,而 RSA 用于加密对称加密算法的密钥。

常用的对称加密算法有 DES、AES、RC4、Blowfish 等等,其中 RC4 属于流加密算法速度比其他三个的块加密算法速度要快。
Joop_Song 2011-02-24
  • 打赏
  • 举报
回复
文件过大能不能读取文件的一部分进行加密??

路过,看看,不是太懂。。
  • 打赏
  • 举报
回复
快多少的话网上有得是比较!

块加密、流加密都是使用字节来处理的,不管什么文件都可以弄成字节。

另外,J2SE 的 API 中有 javax.crypto.CipherInputStream 和 javax.crypto.CipherOutputStream 就是用来加密数据流的。
happy002 2011-02-24
  • 打赏
  • 举报
回复
还有RC4能加密压缩包吗?
happy002 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bao110908 的回复:]
常用的对称加密算法有 DES、AES、RC4、Blowfish 等等,其中 RC4 属于流加密算法速度比其他三个的块加密算法速度要快
[/Quote]

30M的文件的话,能快多少?

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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