Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中长消息的RSA加密和解密_Java_Network Programming_Rsa_Encryption Asymmetric - Fatal编程技术网

java中长消息的RSA加密和解密

java中长消息的RSA加密和解密,java,network-programming,rsa,encryption-asymmetric,Java,Network Programming,Rsa,Encryption Asymmetric,我想使用java标准库,据我所知,它的函数输入是有限的。为此,我实现了两种方法。这是: 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 byt

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

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;
}
private byte[]RSAenc(字符串输入)引发异常{
Cipher c=Cipher.getInstance(“RSA”);
c、 init(Cipher.ENCRYPT_模式,privKey);
int l=in.length();
字节[]部分;
字节[]结果=新字节[](int)(64*java.lang.Math.ceil(l/20.0));
int i=0;

而(i*20+20RSA适合于密钥加密,而不是批量数据加密


大多数协议不使用RSA加密邮件,而是为对称密码(如AES)生成密钥,并使用该密钥加密邮件。然后,RSA用于加密该对称密钥,以便只有邮件收件人可以恢复该密钥。RSA加密的对称密钥与AES加密的邮件一起发送给收件人。

谢谢…是t对称密钥(AES或DES)始终小于64(RSA加密机的最大值)字节数?@kvphxga:好的RSA密钥至少应该是2048位,因此它应该能够加密64个字节以上的密钥。但是,是的,所有这些密码都使用64字节或更少的密钥。@kvphxga:DES有56位密钥-这是非常小的,今天不应该使用(因为暴力强制不需要太多时间).AES有三种变体,密钥大小分别为128位(16字节)、192位(24字节)或256位(32字节),被认为是安全的。另请参见crypto.stackexchange.com上的。