首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解密(RSA)字符串的长度正在更改。

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

Stack Overflow用户
提问于 2018-11-20 10:25:05
回答 1查看 481关注 0票数 0

我有一个用RSA算法加密的字符串,当我试图解密它时,它的工作fine.The解密输出将在byte[]中。

我的问题是,当我试图将byte[]转换成一个新的字符串(解密字符串)时,它的长度是不同的。

如果我尝试使用随机字符串,长度将保持为same.But,如果我解密生成的aesKey(AES),则byte[]的长度正在更改,而新字符串的转换(解密字符串)。

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

字符串"t8xypyI6gKlKTkt4Qec7FCor4EpukZXqYQcIDm6YvbtRB9+YBrX0CqyoHOHN91T8RBQS/JD2osbf4ao9Y"SgNbzhfDa2NpJKMEIBWH4TNlF4Ngb8yWdSm3hz3l8FdeFUIy3pyCxkLjU8n4VAxsmgoIQbgd7DJuPiSMZBA9/IVlcCfo/tZjMtSkezITtoT5aVvLxLaTsp08UREdalvXxb5USKi3cAEdqR9TmLJxB004IMv5Eiuvdmcc3fJzO6mnwiHPuGKArd9LjjiqbPQ75uc8NDOFrvleLc5KwSuThS5Xx7tR1qfoX6qefh6SD7FRk5UzyCEnv+eD+mCQ588Jam1A==";==

*上面的字符串是加密形式的aesKey(由KeyGenerator生成)

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

代码语言:javascript
复制
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);

}

上面,长度在字节字符串转换中发生变化。

假设如果我用普通字符串加密和解密,长度不会改变?为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-20 20:02:26

很可能,decryptedText包含有趣的字节。文档说:

public String(byte[] bytes) 通过使用平台的默认字符集String解码指定的字节数组()来构造新的。新字符串的长度是字符集的函数,因此可能不等于字节数组的长度。 当给定字节在默认字符集中无效时,此构造函数的行为未指定。当需要对解码过程进行更多的控制时,应该使用CharsetDecoder类。

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

https://stackoverflow.com/questions/53390907

复制
相关文章

相似问题

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