Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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_Algorithm_Security_Aes_Rsa - Fatal编程技术网

Java 解密(RSA)字符串的长度正在更改

Java 解密(RSA)字符串的长度正在更改,java,algorithm,security,aes,rsa,Java,Algorithm,Security,Aes,Rsa,我有一个用RSA算法加密的字符串,当我试图解密它时,它工作正常。解密输出将以字节[]为单位 我的问题是,当我试图将字节[]转换为新的Stringdecrypted字符串时,它的长度不同 如果我尝试使用随机字符串,长度保持不变。但是如果我解密 已生成AESKYAES在转换新的字符串解密字符串时,字节[]的长度正在更改 为什么在aesKey解密的情况下我会得到不同的长度??? 随机字符串和生成的aeskey之间有什么区别吗 串== 2.在一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研

我有一个用RSA算法加密的字符串,当我试图解密它时,它工作正常。解密输出将以字节[]为单位

我的问题是,当我试图将字节[]转换为新的Stringdecrypted字符串时,它的长度不同

如果我尝试使用随机字符串,长度保持不变。但是如果我解密 已生成AESKYAES在转换新的字符串解密字符串时,字节[]的长度正在更改

为什么在aesKey解密的情况下我会得到不同的长度??? 随机字符串和生成的aeskey之间有什么区别吗

串== 2.在一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究领域,一个研究一个研究领域,一个非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非非ycenv+eD+mCQ588Jam1A==

****上面的字符串是KeyGenerator生成的AESKEY的加密形式

如果我用RSA解密这个字符串--

private String decrypt(String text, Key privatekey) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    byte[] dectyptedText = null;

    Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPPadding");
    cipher.init(Cipher.DECRYPT_MODE, privatekey);
    dectyptedText = cipher.doFinal(Base64.getDecoder().decode(text));
    System.out.println(dectyptedText.length);                  //32
    System.out.println(new String(dectyptedText).length());    //30
    System.out.println(new String(dectyptedText).getBytes().length); //60
    return new String(dectyptedText);

}
如上所述,长度在字节字符串转换中发生变化

假设我用一个普通字符串加密和解密,长度没有改变??为什么??

很可能,解密的文本包含有趣的字节。报告说:

公共字符串字节[]字节

通过使用平台的默认字符集对指定的字节数组进行解码来构造新字符串。新字符串的长度是字符集的函数,因此可能不等于字节数组的长度

当给定字节在默认字符集中无效时,此构造函数的行为未指定。当需要对解码过程进行更多控制时,应使用CharsetDecoder类


共享代码。我不确定你的问题是什么。是的,我共享了代码。请检查一下。我无法理解你的问题。首先是字符串,然后是AES密钥。使用新的字符串构造函数将AES密钥转换为字符串是没有意义的。我打赌OP的字符集是UTF-8。AESkey实际上是随机字节,从统计上看,其中近一半是无效的UTF-8;虽然在现实中没有规定,但解码替代了U+FFFD,U+FFFD然后重新编码为3个字节,所以得到的随机长度接近16+3x16=64个字节。当然,实际的AES键值会被销毁。所以不要这样做。对,如果我们将字符串转换为字节[]-->字节[]转换为字符串,行为不会改变,如果我们将字节[]转换为新字符串,字节[]的长度会改变,这可能会影响字节[]。