Как запросить зашифрованное поле в SQLite

#java #sqlite #encryption

#java #sqlite #шифрование

Вопрос:

Мне нужно зашифровать поле в моей базе данных sqlite для Android. Для этого я собираюсь использовать следующий код. Поймите, я собираю код с сайта. Если у вас есть идея получше, пожалуйста, дайте мне знать.

  public byte[] keyGen() throws NoSuchAlgorithmException {
    KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
    keyGenerator.init(192);
    return keyGenerator.generateKey().getEncoded();
 }

 public byte[] encript(byte[] dataToEncrypt, byte[] key)
            throws NoSuchAlgorithmException, NoSuchPaddingException,
            InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    //I'm using AES encription
    Cipher c = Cipher.getInstance("AES");
    SecretKeySpec k = new SecretKeySpec(key, "AES");
    c.init(Cipher.ENCRYPT_MODE, k);
    return c.doFinal(dataToEncrypt);
  }

  public byte[] decript(byte[] encryptedData, byte[] key)
            throws NoSuchAlgorithmException, NoSuchPaddingException,
            InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    Cipher c = Cipher.getInstance("AES");
    SecretKeySpec k = new SecretKeySpec(key, "AES");
    c.init(Cipher.DECRYPT_MODE, k);
    return c.doFinal(encryptedData);
  }
  

Обратите внимание, что поле представляет собой длинный текст и имеет индекс. Теперь мой вопрос заключается в том, как запросить зашифрованное поле? Я могу получить строку и расшифровать поле из базы данных. Но я не знаю, как использовать предложение where в этом случае. Может быть, есть функция sqlite для расшифровки / шифрования?

ОБНОВЛЕНИЕ: Я решил создать пользовательскую функцию SQLite для расшифровки и шифрования. Я думаю, это решит проблемы в этом вопросе.

Комментарии:

1. Вы бы зашифровали текст и использовали зашифрованный массив байтов с предложением WHERE.

2. Но это не сработает, если я включу что-то вроде «where text=’% Babo%'». Я думаю, что лучшим подходом является создание вашей собственной функции Sqlite для шифрования и дешифрования.

3. Если у вас есть решение, почему бы не опубликовать ответ самостоятельно?