H-p A
Просветленный
(46834)
4 года назад
сокеты не для нубов и вообще для нердов, пользуй HTTP, какую-нибудь красивую библиотеку в зависимости от задачи, больше пользы будет
Юра КотУченик (182)
4 года назад
Задача просто передать 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[] он изменяется?