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

时间:2018-11-20 10:25:05

标签: java algorithm security aes rsa

我有一个用RSA算法加密的String,当我尝试解密时,它工作正常。解密输出将在byte []中。

我的问题是,当我尝试将byte []转换为新的String(解密的String)时,它的长度有所不同。

如果我尝试使用随机字符串,则长度保持不变。但是,如果我解密 生成的aesKey(AES),在转换新的String(解密的String)时,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);

}

上面,字节字符串转换的长度在变化。

假设我使用普通字符串进行加密和解密,长度没有变化吗????为什么????

1 个答案:

答案 0 :(得分:1)

同样,decryptedText包含有趣的字节。 documentation说:

  

public String(byte[] bytes)

     

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

     

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