Шифрование Xml с использованием сеансового ключа

У меня есть XML, который хранится в строке. Мне нужно зашифровать его с помощью сеансового ключа (AES и 256 бит).

Я использую следующий код для генерации ключа:

public byte[] generateSessionKey() throws NoSuchAlgorithmException, NoSuchProviderException
{
    KeyGenerator kgen = KeyGenerator.getInstance("AES","BC");
    kgen.init(SYMMETRIC_KEY_SIZE);
    SecretKey key = kgen.generateKey();
    byte[] symmKey = key.getEncoded();
    return symmKey;
}

Используя следующий код для шифрования данных с помощью ключа сеанса:

public byte[] encryptUsingSessionKey(byte[] skey, byte[] data) throws InvalidCipherTextException
{
    PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine(), new PKCS7Padding());

     cipher.init(true, new KeyParameter(skey));

     int outputSize = cipher.getOutputSize(data.length);

     byte[] tempOP = new byte[outputSize];
     int processLen = cipher.processBytes(data, 0, data.length, tempOP, 0);
     int outputLen = cipher.doFinal(tempOP, processLen);

     byte[] result = new byte[processLen + outputLen];
     System.arraycopy(tempOP, 0, result, 0, result.length);
     return result;
}

Итак, я хочу знать, правильно ли я это делаю или нет?

1 ответ

Является ли сессионный ключ закрытым, если не существует проблемы безопасности.

Вы не указываете режим шифрования, лучше всего быть явным.

Поскольку кажется, что не существует iv, и режим не указан, предполагается, что режим является ECB, который небезопасен, лучше использовать режим CBC со случайным iv, который добавляется к зашифрованным данным для использования во время дешифрования.

Также отсутствует шифрование аутентификации и генерация ключей слабая, было бы лучше использовать функцию деривации, такую ​​как PBKDF2.

Не используйте режим ECB, это небезопасно, см. Режим ECB, прокрутите вниз до пингвина.

Подумайте об использовании более полной библиотеки, такой как JMCryptor от RNCryptor, которая включает в себя получение ключа PBKDF2, аутентификацию шифрования, случайное iv и управление версиями. Также см. Спецификацию для RNCryptor для получения дополнительной информации.

Другие вопросы по тегам