Ошибка длины строки (String) алгоритма шифрования AES?

1
 public static String encryptKey(String key,String text) throws CryptoException 
    {
        String key1=null;
        try {

            System.out.println("input parameters length  "+key.length()+ " " +text.length());
            System.out.println("input parameters value "+key+ " " +text);
            Key secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM);
            Cipher cipher = Cipher.getInstance(TRANSFORMATION);

            cipher.init(Cipher.ENCRYPT_MODE, secretKey);             
            byte[] inputBytes=text.getBytes();
           //System.out.println(inputBytes.length);
            byte[] outputBytes = cipher.doFinal(inputBytes);
           // key= WriteArray.bytesToString(outputBytes);  
           key1=outputBytes.toString();


            System.out.println("output parameters  "+key1.length()+" "+ text.length());
            System.out.println("output parameters value "+key1+ " " +text);
        } 

Длина входных и выходных строк различна. Почему это происходит?

Является ли проблема преобразования строки в преобразование байтового массива? Результат показан ниже.

--------------------------------------
Level 1 Encryption Started
input parameters length  16 16
input parameters value 5iafq1b7d8i4hedu vg322qcfmnjbp3nj
output parameters  11 16
output parameters value [B@35851384 vg322qcfmnjbp3nj
--------------------------------------
Level 2 Encryption Started
input parameters length  16 11
input parameters value tvqfpjpul28ovo5c [B@35851384
output parameters  11 11
output parameters value [B@649d209a [B@35851384
--------------------------------------
Теги:
encryption
aes
encryption-symmetric

1 ответ

0

Никогда не обрабатывайте зашифрованные данные как String. Это двоичные данные, и почти наверняка что-то происходит плохо, когда вы вызываете outputBytes.toString().

Если вы должны обрабатывать двоичные данные как строку, вы должны применить преобразование, которое может обрабатывать двоичные данные и надежно создает полезную строку. Примером может служить кодировка base64.

В вашем вопросе вы, похоже, ожидаете, что незашифрованный текст будет иметь такую же длину, как зашифрованные байты, преобразованные в строку. Нет причин, почему это было бы правдой.

Вы должны ожидать, что если вы зашифруете и затем расшифруете зашифрованные байты, которые вернете исходное сообщение. Однако размер зашифрованных данных почти наверняка не будет того же размера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню