Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Передача byte[] через Java Socket

Юра Кот Ученик (182), закрыт 4 года назад
В общем есть 2 части проги, сервер и клиент. От клиента нужно передать byte[] на сервер. Почему именно byte[] ? Я использую RSA шифрование для шифровки текста, при конвертации byte[] -> String и передачи String - возникает ошибка при обратной конвертации (Data must not be longer than 256B). Поэтому мною принято решение передавать byte[] по сокетам.

Клиент:

oos = new DataOutputStream(socket.getOutputStream());
oos.write(cod); //Передача byte[]
oos.flush();
oos.close();
Сервер:

Socket client = server.accept();
DataInputStream inputStream = new DataInputStream(client.getInputStream());
byte[] toDecrypt = new byte[256];
inputStream.readFully(toDecrypt, 0, 256);
В итоге, проверяя byte[] на двух сторонах: до отправки и после, они различаются, в этом и суть вопроса, почему? Есть ещё момент, т. к. я использую RSA шифрование, то publicKey я передаю клиенту не через сокет, сервер записывает его в файл, а клиент заносит его в кфг

KeyPairGenerator pairgen = KeyPairGenerator.getInstance("RSA");
KeyPair keyPair = pairgen.generateKeyPair();
Key publicKey = keyPair.getPublic();
String str_key = Base64.getEncoder().encodeToString(publicKey.getEncoded());
//и дальше запись str_key в файл...
Далее мы его преобразовываем обратно в Key:

byte[] publicBytes = Base64.getDecoder().decode(str_key);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
Key pubKey = keyFactory.generatePublic(keySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cod = cipher.doFinal(str.getBytes()); //Шифруем строку str.
Также я проверял ключи на двух сторонах, визуально одинаковы. Так почему же при передачи byte[] он изменяется?
Лучший ответ
H-p A Просветленный (46834) 4 года назад
сокеты не для нубов и вообще для нердов, пользуй HTTP, какую-нибудь красивую библиотеку в зависимости от задачи, больше пользы будет
Юра КотУченик (182) 4 года назад
Задача просто передать byte[] от клиента к серверу. Есть какие-либо примеры предложенного способа?
Остальные ответы
Похожие вопросы