Длина строки расшифровки (RSA) меняется - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть строка, зашифрованная с помощью алгоритма RSA. Когда я пытался расшифровать, она работает нормально. Вывод расшифровки будет в байтах [].

У меня вопрос, когда я пытаюсь преобразовать байт[] для новой строки (расшифрованной строки) она получает другую длину.

Если я попробую со случайной строкой, длина останется такой же. Но если я расшифрую сгенерированный aesKey (AES), длина байта [] изменяется при преобразовании новой строки (расшифрованной строки).

Почему я получаю другую длину в случае расшифровки aesKey ???Есть ли разница между "случайной строки" и "генерируемой aeskey"

Строка == "t8xypyI6gKlKTkt4Qec7FCor4EpukZXqYQcIDm6YvbtRB9 + YBrX0CqyoHOHN91T8RBQS / JD2osbf4ao9Y" SgNbzhfDa2NpJKMEIBWH4TNlF4Ngb8yWdSm3hz3l8FdeFUIy3pyCxkLjU8n4VAxsmgoIQbgd7DJuPiSMZBA9 / IVlcCfo / tZjMtSkezITtoT5aVvLxLaTsp08UREdalvXxb5USKi3cAEdqR9TmLJxB004IMv5Eiuvdmcc3fJzO6mnwiHPuGKArd9LjjiqbPQ75uc8NDOFrvleLc5KwSuThS5Xx7tR1qfoX6qefh6SD7FRk5UzyCEnv + еО + mCQ588Jam1A == ";

1010 ***** Приведенная выше строка является зашифрованной формой 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 голосов
/ 20 ноября 2018

Вероятно, decryptedText содержит смешные байты.Документация гласит:

public String(byte[] bytes)

Создает новый String путем декодирования указанного массива байтов с использованием кодировки по умолчанию платформы .Длина новой строки является функцией кодировки, и, следовательно, не может быть равным длине байтового массива .

Поведение этого конструктора, когда данные байты не являютсядопустимый в кодировке по умолчанию не указан.Класс CharsetDecoder следует использовать, когда требуется больший контроль над процессом декодирования.

...