Java 如何在SQLite中查询加密字段
我需要在我的android 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
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函数进行加密和解密。如果您有一个解决方案,为什么不自己发布一个答案呢?