【发布时间】:2018-11-20 10:25:05
【问题描述】:
我有一个使用 RSA 算法加密的字符串,当我尝试解密时它工作正常。解密输出将在 byte[] 中。
我的问题是当我尝试将 byte[] 转换为新字符串(解密字符串)时,它的长度不同。
如果我尝试使用随机字符串,则长度保持不变。但如果我解密 生成 aesKey(AES) 字节[] 的长度在转换新字符串(解密字符串)时发生变化。
为什么我在 aesKey 解密的情况下得到不同的长度??? “随机字符串”和“生成的aeskey”有什么区别
字符串 == “t8xypyI6gKlKTkt4Qec7FCor4EpukZXqYQcIDm6YvbtRB9 + YBrX0CqyoHOHN91T8RBQS / JD2osbf4ao9Y” SgNbzhfDa2NpJKMEIBWH4TNlF4Ngb8yWdSm3hz3l8FdeFUIy3pyCxkLjU8n4VAxsmgoIQbgd7DJuPiSMZBA9 / IVlcCfo / tZjMtSkezITtoT5aVvLxLaTsp08UREdalvXxb5USKi3cAEdqR9TmLJxB004IMv5Eiuvdmcc3fJzO6mnwiHPuGKArd9LjjiqbPQ75uc8NDOFrvleLc5KwSuThS5Xx7tR1qfoX6qefh6SD7FRk5UzyCEnv + ED + mCQ588Jam1A ==“; P>
****以上字符串是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);
}
以上,字节串转换中长度是变化的。
假设如果我用普通字符串加密和解密,长度不会改变????为什么????
【问题讨论】:
-
分享代码。我不确定你的问题是什么。
-
是的,我分享了代码请查看一次..
-
我无法理解您的问题。首先你在谈论一个字符串,然后你在谈论一个 AES 密钥。使用
new String()构造函数将 AES 密钥转换为字符串是没有意义的。
标签: java algorithm security aes rsa