Что не так с моей логикой шифрования? - PullRequest
0 голосов
/ 13 января 2012

Я думал, что у меня отсортированы классы шифрования, но возникла проблема.

Моя модель клиент / сервер проста.Клиент подключается к серверу, отправляет все сообщения в очереди сообщений и затем отключается.

Первое отправленное сообщение абсолютно нормально, но любые сообщения, отправленные после этого, выглядят как первый блок (первые 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, он ломается.

Обновление: Похоже, что на самом деле я получаю дополнительный блок в начале сообщения- делать больше тестов.

1 Ответ

0 голосов
/ 15 января 2012

Вы, вероятно, получите IV в начале. Вы должны использовать первые байты как IV, затем расшифровать ключом и данным IV. Это распространенная техника, и она будет отображать именно ту проблему, которую вы описываете. Вы можете даже пропустить первый выходной блок и просто использовать следующие блоки как простой текст (хотя это называется хакерством). Одно можно сказать наверняка: если ваш первый блок - мусор, то пролоб - это IV.

...