Я пытаюсь установить протокол связи с защищенным сервером. В какой-то момент сервер ожидает мой асимметрично зашифрованный байтовый массив симметричного ключа длиной 128 байтов, но после того, как я использую DatatypeConverter.printHexBinary, чтобы преобразовать массив байтов в строку, и после того, как я его использую, он удваивает количество байты в массиве. Я хочу знать, почему это происходит и как это решить?
Использование различных типов методов, которые разбирают byte [] в String, но сервер их не распознает.
Вот код, который я использую:
** Примечание. Открытый ключ отправляется сервером при отправке цифрового сертификата.
Для шифра:
private static byte[] cifradoAsimetrico(SecretKey key, PublicKey publicKey) {
byte[] cipheredText;
try {
Cipher cipher = Cipher.getInstance(asimetrico);
byte[] clearText = key.getEncoded();
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
cipheredText = cipher.doFinal(clearText);
return cipheredText;
} catch (Exception e) {
System.out.println("[Exception] Method cifradoAsimetrico( ): " + e.getMessage());
return null;
}
}
Для протокола связи:
keyGenerator = KeyGenerator.getInstance(simetrico,new BouncyCastleProvider());
keyGenerator.init(128);
desKey = keyGenerator.generateKey();
byte[] llaveCifrada = cifradoAsimetrico(desKey, publicaServidor);
System.out.println("Tamaño cifrada: " + llaveCifrada.length);
String llaveCifradaHexa = DatatypeConverter.printHexBinary(llaveCifrada);
System.out.println("Tamaño hexa: "+llaveCifradaHexa.getBytes().length);
socketPrintWriter.println(llaveCifradaHexa);
// Алгоритм и алгоритм создания и создания 256-байтовых кодов,
// por eso el servidor no lo recibe. NO PUDIMOS ENCONTRAR LA РАЗОН.
// Сервер останавливается и показывает, что данные недопустимого размера блока не должны быть длиннее 128 байт