首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中长消息的RSA加密与解密

问java中长消息的RSA加密与解密
EN

Stack Overflow用户
提问于 2011-08-06 02:08:49
回答 1查看 2.4K关注 0票数 2

我想使用java标准库,据我所知,它的函数输入是有限的。为此,我实现了两个方法。下面是它们:

代码语言:javascript
复制
private byte[] RSAenc(String in) throws Exception {
    Cipher c = Cipher.getInstance("RSA");
    c.init(Cipher.ENCRYPT_MODE, privKey);
    int l = in.length();

    byte[] part;
    byte[] result = new byte[(int)(64*java.lang.Math.ceil(l/20.0))];
    int i = 0;
    while(i*20+20<l) {
        part = c.doFinal(in.substring(i*20,i*20+19).getBytes("UTF-8"));
        System.arraycopy(part, 0, result, i*64, part.length);
        i = i+1;
    }
    part = c.doFinal(in.substring(i*20,l-1).getBytes("UTF-8"));
    System.arraycopy(part, 0, result, i*64, part.length);
    return result;

}

private String RSAdec(byte [] in) throws Exception {
    Cipher c = Cipher.getInstance("RSA");
    c.init(Cipher.DECRYPT_MODE, privKey);

    String result = "";
    byte[] part = new byte[64];
    int l = in.length;
    int i = 0;
    while(i+64<=l) {
        System.arraycopy(in, i, part, 0, part.length);
        result = result + new String(c.doFinal(part), "UTF-8");
        i= i+64;
    }
    return result;
}

它们的工作方式是这样的:对于加密,我将字符串分解为最多20个子字符串,然后使用Cipher对它们进行加密。对于解密,我将字节数组分解为64字节块,并对它们应用Cipher解密。是否已经有一个函数可以做到这一点?或者至少有一个更整洁的解决方案?我的方法有多安全?加密结果长度(result.length)在所有的JRE发行版上都是64吗?

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-06 02:12:24

RSA适用于密钥加密,而不是批量数据加密。

大多数协议不使用RSA加密消息,而是为对称密码生成密钥,并使用该密钥加密消息。然后,使用RSA对该对称密钥进行加密,以便只有消息收件人才能恢复它。RSA加密的对称密钥与AES加密的消息一起发送给接收者。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6960729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档