我有一个用RSA算法加密的字符串,当我试图解密它时,它的工作fine.The解密输出将在byte[]中。
我的问题是,当我试图将byte[]转换成一个新的字符串(解密字符串)时,它的长度是不同的。
如果我尝试使用随机字符串,长度将保持为same.But,如果我解密生成的aesKey(AES),则byte[]的长度正在更改,而新字符串的转换(解密字符串)。
为什么在aesKey解密的情况下我会得到不同的长度?“随机字符串”和“生成的美学”之间有什么区别吗?
字符串"t8xypyI6gKlKTkt4Qec7FCor4EpukZXqYQcIDm6YvbtRB9+YBrX0CqyoHOHN91T8RBQS/JD2osbf4ao9Y"SgNbzhfDa2NpJKMEIBWH4TNlF4Ngb8yWdSm3hz3l8FdeFUIy3pyCxkLjU8n4VAxsmgoIQbgd7DJuPiSMZBA9/IVlcCfo/tZjMtSkezITtoT5aVvLxLaTsp08UREdalvXxb5USKi3cAEdqR9TmLJxB004IMv5Eiuvdmcc3fJzO6mnwiHPuGKArd9LjjiqbPQ75uc8NDOFrvleLc5KwSuThS5Xx7tR1qfoX6qefh6SD7FRk5UzyCEnv+eD+mCQ588Jam1A==";==
*上面的字符串是加密形式的aesKey(由KeyGenerator生成)
如果我用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);
}上面,长度在字节字符串转换中发生变化。
假设如果我用普通字符串加密和解密,长度不会改变?为什么?
发布于 2018-11-20 20:02:26
很可能,decryptedText包含有趣的字节。文档说:
public String(byte[] bytes)通过使用平台的默认字符集String解码指定的字节数组()来构造新的。新字符串的长度是字符集的函数,因此可能不等于字节数组的长度。 当给定字节在默认字符集中无效时,此构造函数的行为未指定。当需要对解码过程进行更多的控制时,应该使用CharsetDecoder类。
https://stackoverflow.com/questions/53390907
复制相似问题