Java 如何在SQLite中查询加密字段

Java 如何在SQLite中查询加密字段,java,sqlite,encryption,Java,Sqlite,Encryption,我需要在我的android sqlite数据库中加密一个字段。我将使用下面的代码来实现这一点。了解我从一个站点获取的代码。如果你有更好的主意,请告诉我 public byte[] keyGen() throws NoSuchAlgorithmException { KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(192); return keyGenerator

我需要在我的android sqlite数据库中加密一个字段。我将使用下面的代码来实现这一点。了解我从一个站点获取的代码。如果你有更好的主意,请告诉我

 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函数来解密和加密。我认为这将解决这个问题。

您可以对文本进行加密,并将加密的字节数组与WHERE子句一起使用。但如果我包含类似“WHERE text='%Babo%”的内容,则这不起作用。我认为更好的方法是创建您自己的Sqlite函数进行加密和解密。如果您有一个解决方案,为什么不自己发布一个答案呢?