Я сейчас сижу на двух проблемах. Я подозреваю, что они являются частью той же проблемы, но 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");
}