2016-07-13 4 views
0

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

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

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; 
} 

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

ответ

0

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

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

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

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

Не используйте режим ЕЦБ, он небезопасен, см. ECB mode, прокрутите вниз до Пингвина.

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

+0

Спасибо за все предложения, я их применим. Но я также хочу знать, что шифрование, сделанное вышеуказанным кодом, является правильным или нет? – Mudit

+0

Это зависит от того, что означает «право или нет»? Лучшая практика: № – zaph

+0

Я хотел зашифровать XML с помощью ключа сеанса с помощью AES и PKCS7Padding, поэтому я хочу знать, что результат шифрования из вышеуказанного кода может быть расшифрован или нет? Прямо сейчас я не забочусь о безопасности – Mudit

Смежные вопросы