Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > encrypt/decrypt проблема с кодировкой


Автор: 4epT 12.3.2012, 12:04
Всем привет. Делаю класс CryptoUtil, для шифрования и дешифрования данных. На некоторых данных расшифровка сыпется, насколько я понял то ломается кодировка, так как класс полностью рабочий если после шифрования не преобразовывать массив байт в строку.

Вот собственно код:

Код

public String encode(String cleartext, Key key) {
        try {
            System.out.println(cleartext);
            return new BASE64Encoder().encode(crypt(cleartext.getBytes(Const.ENCODING), key, Cipher.ENCRYPT_MODE));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }

public String decode(String data, Key key) {
        try {
            System.out.println(data);
            byte[] ciphertext = new BASE64Decoder().decodeBuffer(data);
            return new String(crypt(ciphertext, key, Cipher.DECRYPT_MODE), Const.ENCODING);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException ex){
            ex.printStackTrace();
        }
        return null;
    }


private byte[] crypt(byte[] input, Key key, int mode) {
        
        IvParameterSpec iv = new IvParameterSpec(SALT);
        Cipher c;
        try {
            c = Cipher.getInstance(ALGORITHM);
            c.init(mode, key, iv);
            return c.doFinal(input);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


Кодировка везде UTF-8 (Указывется через Const.ENCODING). После шифрования массив байт преобразовывается в стркоу при помощи BASE64Encoder, а при расшифровки строка преобразуется в массив байт при помощи BASE64Decoder. В итоге вылетает исключение:

Код

SEVERE: javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
    at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
    at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
    at com.sun.crypto.provider.BlowfishCipher.engineDoFinal(DashoA13*..)


В чем может быть проблема ?

Автор: Alexandr87 13.3.2012, 11:46
Проблема в том, что на вход расшифровывания ожидается размер массива кратный 8. (блочное шифрования), но почему-то подается не кратный 8.

ALGORITHM чему равен?
И приведите следующие данные: размер следующих массивов байт (именно массивов байт до кодирования в BASE64 и после раскодирвоание из BASE64). Шифруемые массив, массив - результат шифрования, массив подаяющийся на вход расшифровывания, массив данных после расшифровывания.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)