O: room: message
fireActionPerformed (localAddress
+ ":" + INFO
+ ":" + room.getName ()
+ ":" + "Помилка при декодуванні. Немає ключа або він не вірний. "); p align="justify">}
}
// Передаємо команду в систему відображення.
// Приклад:
}
}
// INIT: room: public_key | | ACPT: room: public_keyif (mes.startsWith (CMD_PRV_INIT) | | mes.startsWith (CMD_PRV_ACCEPT)) {[] split = mes.split (": ", 3); cmd = split [0]; roomName = split [1]; key = split [2];
NetRoom room = null;
// При ініціалізації захищеного з'єднання для якої-небудь
// кімнати, необхідно додати її до списку кімнат, до яких
// причетний користувач. (cmd.equals (CMD_PRV_INIT)) {
room = new NetRoom (roomName);. add (room);
} else
// При прийнятті запрошення на створення захищеного з'єднання,
// шукаємо за назвою вже існуючу кімнату.
room = getRoomByName (roomName); (room! = null) {
// Перевіряємо установку прапора захищеного з'єднання .. setProtected (true);
// Перетворимо отриманий масив байт у відкритий.
// Спочатку з масиву байт утворюється специфікація ключа.
X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec (key.getBytes ());
try {
// Потім створюється фабрика ключів на основі потрібного алгоритму шифрування.
KeyFactory keyFactory = KeyFactory.getInstance (RSACipher.ALGORITHM);
// І нарешті створюється сам відкритий ключ.
PublicKey pubKey = keyFactory.generatePublic (pubKeySpec);
// Встановлюємо його в якості параетра потрібної кімнати.
room.setExternalPublicKey (pubKey);
} catch (InvalidKeySpecException e) {. printStackTrace ();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace ();
}
}
// У відображення необхідно передавати лише команду ініціалізації
// захищеного з'єднання. (cmd.equals (CMD_PRV_INIT)) {
// Приклад: from: INIT: room: public_key
fireActionPerformed (from + ":" + cmd + ":" + roomName);
// І необхідно сформувати і передати пакет підтвердження
// з'єднання. А разом з ним передати ключ для шифрування повідомлень. p align="justify"> sendMessage (new String (room.getKeyPa...