#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. Если у вас есть решение, почему бы не опубликовать ответ самостоятельно?