Отправка зашифрованной строки через сокеты и получение исключения дополнения при ее возврате и неправильном дешифровании - PullRequest
0 голосов
/ 24 октября 2019

Я сейчас сижу на двух проблемах. Я подозреваю, что они являются частью той же проблемы, но IDK. https://i.imgur.com/324NmFs.png На этом рисунке я отправляю строку на сервер и получаю обратно так же, как я ее отправил, сервер получает здесь только зашифрованное сообщение и возвращает его всем подключенным клиентам, но каким-то образом клиент не расшифровал всеstring?

Моя вторая проблема заключается в том, что некоторые строки дают мне BlockSizeException, как здесь, где я отправил строку "cvbn", и она не может расшифровать строку. https://i.imgur.com/q9mgqOJ.png

                String send = null;
                try {
                    send = new String(enCipher.doFinal(txtMessage.getText().getBytes("UTF-8")));
                    client.SendMessage(send); //krypterar datan som sänds ut
                } catch (IllegalBlockSizeException | BadPaddingException | UnsupportedEncodingException e1) {
                    System.err.println("Error in enciphering");
                } 

Вот метод шифрования и отправки

                try {   
                    System.out.println(client.getInput() + " :::Getting input");
                    System.out.println("Bytes  " + client.getInput().getBytes());

                    decryptIn = new String(deCipher.doFinal(client.getInput().getBytes()) );

                    System.out.println("decryptIn:: " + decryptIn);

                    listChat.add(decryptIn); //dekrypterar input datan
                } catch (IllegalBlockSizeException | BadPaddingException     e) {
                    e.printStackTrace();
                } 

, и это метод расшифровки.

                try { //initializerar decipher och encipher 
                    deCipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding"); // algoritm som används
                    deCipher.init(Cipher.DECRYPT_MODE, secretKey);

                    enCipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding"); // Krypterar med blowfish
                    enCipher.init(Cipher.ENCRYPT_MODE, secretKey);

                } catch (InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException e) {
                    System.err.println("Error in initializing");
                } ¨

и метод инициализации.

Сервер в этом случае очень прост и просто повторяет то, что он дает всем клиентам, и я не думаю, что здесь кроется проблема, поскольку он прекрасно возвращает зашифрованное сообщение.

Я не могу отформатировать изображения, так как у меня нет 10 репутации. Извините.

Редактировать: я пытался добавить стандартные charsets utf-16 и 8, но только 8, кажется, дает что-то положительное, и только когда я шифрую данные.

Редактировать2: я наконец исправил это. В итоге я перешел на AES и расшифровал подобные сообщения, это также работало с blowfish

public String deCipherString(String message) throws IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {


     byte[] decoded = Base64.getDecoder().decode(message.getBytes("UTF-8"));
     byte[] decrypted = deCipher.doFinal(decoded);
     return new String(decrypted, "UTF-8");

}
public String enCipherString(String message) throws IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {


    byte[] encrypted = enCipher.doFinal(message.getBytes("UTF-8"));

    byte[] encoded = Base64.getEncoder().encode(encrypted);

    return new String(encoded, "UTF-8");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...