Шифрование сообщения в Java - PullRequest
       21

Шифрование сообщения в Java

0 голосов
/ 15 ноября 2010

Я являюсь проектом об использовании bouncycastle java для шифрования.

Однако, когда я шифрую сообщение, оно вызывает для меня исключение.

javax.crypto.IllegalBlockSizeException: данные не выровнены по размеру блока

Я использую Blowfish / ECB / NoPadding, и сообщение представляет собой xml.

public static void main(String args[]){ 
     String message = "<abc>ABCDEFG</abc>"; 
     String key = "key"; 
     byte[] b = encrypt(message.getBytes(), key.getBytes());
}

public byte[] encrypt(byte encrypt[], byte en_key[]) { 
     try { 
           SecretKeySpec key = new SecretKeySpec(en_key, "Blowfish"); 
           Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding"); 
           cipher.init(Cipher.ENCRYPT_MODE, en_key); 
           return cipher.doFinal(encrypt); 
     } catch (Exception e) { 
           e.printStackTrace();
           return null; 
         }

} 

Может ли кто-нибудь мне помочь?

Спасибо

Ответы [ 2 ]

5 голосов
/ 15 ноября 2010

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

Укажите схему заполнения.Измените на Blowfish/CBC/PKCS5Padding, и оно должно работать.

Заполнение вручную нулевыми байтами: Создайте новый массив с большим размером, кратным 8, а затем скопируйте в него старый массив.

public static byte[] encrypt(byte encrypt[], byte en_key[]) {

    if(encrypt.length % 8 != 0){ //not a multiple of 8
        //create a new array with a size which is a multiple of 8
        byte[] padded = new byte[encrypt.length + 8 - (encrypt.length % 8)];

        //copy the old array into it
        System.arraycopy(encrypt, 0, padded, 0, encrypt.length);
        encrypt = padded;
    }

    try {
        SecretKeySpec key = new SecretKeySpec(en_key, "Blowfish");
        Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return cipher.doFinal(encrypt);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}
0 голосов
/ 15 ноября 2010
public static void main(String args[]){ 
     String message = "<abc>ABCDEFG</abc>"; 
     String key = "key"; 
     byte[] b = encrypt(message.getBytes(), key.getBytes());
}

public byte[] encrypt(byte encrypt[], byte en_key[]) { 
     try { 
           SecretKeySpec key = new SecretKeySpec(en_key, "Blowfish"); 
           Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding"); 
           cipher.init(Cipher.ENCRYPT_MODE, en_key); 
           return cipher.doFinal(encrypt); 
     } catch (Exception e) { 
           e.printStackTrace();
           return null; 
     }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...