Я думал, что у меня отсортированы классы шифрования, но возникла проблема.
Моя модель клиент / сервер проста.Клиент подключается к серверу, отправляет все сообщения в очереди сообщений и затем отключается.
Первое отправленное сообщение абсолютно нормально, но любые сообщения, отправленные после этого, выглядят как первый блок (первые 16 символов)строки) неправильно.Странно то, что все остальные блоки выглядят нормально, что очень странно, поскольку я CBC.
Настройки шифрования:
encryptionAlgorithm = "AES";
encryptionBitCount = 256;
encryptionMessageLength = 176;
hashingAlgorithm = "PBEWithSHA256And256BitAES-CBC-BC";
hashingCount = //some number;
cipherTransformation = "AES/CBC/PKCS7Padding";
salt = //some bytes;
Моя логика для клиента работает следующим образом:
- Начальный шифр через:
cipher.init(Cipher.ENCRYPT_MODE, cipherInitKey);
- Подключение к серверу
для каждого сообщения есть очередь сообщений
- Создать изапись IV в сокет с помощью:
stream.write(cipher.getParameters().getParameterSpec(IvParameterSpec.class).getIV());
- Создание зашифрованного текста для записи в сокет с помощью:
stream.write(cipher.doFinal(message));
конец для
Моя логика для сервера работает следующим образом:
для каждого полученного сообщения
- Чтение IV из сокета (16 байтов).
- Инициализацияшифровать по:
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));
- Прочитать сообщение из сокета (его фиксированный размер).(176 байт)
- Расшифровать сообщение через
cipher.doFinal(message)
end для
Странно то, что он прекрасно работает локально с клиентом и сервером java.Но когда я ставлю сервер на свой VPS и у меня есть клиент andriod, он ломается.
Обновление: Похоже, что на самом деле я получаю дополнительный блок в начале сообщения- делать больше тестов.