Я разрабатываю небольшую схему аутентификации с использованием RSA и RC4. В настоящий момент я пытаюсь отправить клиенту случайно сгенерированный ключ сеанса, зашифрованный с помощью открытого ключа клиента. Оттуда клиент прочитает ключ сеанса и расшифрует его с помощью своего закрытого ключа, а затем отправит хэш обратно на сервер (я не буду вдаваться в более тонкие механизмы безопасности, потому что они не являются частью проблемы).Частный ключ, дешифрующий симметричный ключ, но дающий разные результаты, когда симметричный ключ подключен к сети?
В настоящее время я подтвердил, что на сервере имеется идентичная копия открытого ключа клиента. Я знаю, что сервер шифрует случайно сгенерированный ключ сеанса с открытым ключом клиента. Таким образом, [скорее всего,] проблем нет.
Я думаю, что проблема заключается в передаче ключа. Ключ типа струнного и инициализируется как так -
String sessionKey = new BigInteger(128, server.random).toString(128);
и передается клиенту с помощью DataOutputStream -
o.writeUTF(this.encryptedSessionKey);
encryptedSessionKey нормальная строка, без определенного кодирования. Я думаю, что, возможно, при расшифровке, кодирование Java modified UTF-8, порождает ключ сеанса. Я расшифровать как это -
this.sessionKey = new String(cryptUtil.rsaDecrypt(clientPrivateKey, this.encryptedSessionKey.getBytes()));
// Where encryptedSessionKey is read from the stream using i.readUTF();
бы использовать String.getBytes() на строке, закодированной в Java модифицированного UTF-8 (читать DataInputStream.readUTF()) возвращают разные данные из строки реализованной без определенной кодировки?