我考虑将我的1000行db记录放在android中的类中,以便更好地防止窃取sqlite数据库,我相信这是解决窃取问题的一种更简单的方法,而不是使用加密sqlite db 。我的数据将始终固定,不会进行任何更改。所以我更感兴趣的是如何对应用程序从java类而不是sqlite获取数据的速度做出反应,或者如果有人能告诉我加密数据库的简单方法的例子,我也使用SqliteAssistHelper所以我不要以为我可以将我的资产文件夹移动到我的应用程序的根目录
答案 0 :(得分:1)
我只是加密你放入数据库的每一行。
用法:
Crypto cr = new Crypto();
cr.generateKey();
byte[] enc = cr.encrypt("some data string"); // enc is your encrypted string
Crypto.java:
public class Cryptooo {
SecretKeySpec key = null;
byte[] ciphertext;
public void generateKey() {
String passphrase = "3xtr3meDiFficUltp@ss";
MessageDigest digest = null;
try {
digest = MessageDigest.getInstance("SHA");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
digest.update(passphrase.getBytes());
key = new SecretKeySpec(digest.digest(), 0, 16, "AES");
byte[] keyBytes = key.getEncoded();
}
public byte[] encrypt(String string) {
Cipher aes = null;
try {
aes = Cipher.getInstance("AES/ECB/PKCS5Padding");
aes.init(Cipher.ENCRYPT_MODE, key);
ciphertext = aes.doFinal(string.getBytes());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return ciphertext;
}
public String decrypt(byte[] ciphertext) {
Cipher aes = null;
String cleartext =null;
try {
aes = Cipher.getInstance("AES/ECB/PKCS5Padding");
aes.init(Cipher.DECRYPT_MODE, key);
cleartext = new String(aes.doFinal(ciphertext));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return cleartext;
}
}
答案 1 :(得分:0)
您熟悉此过程sqlcipher吗? 另请看一下:sqlite-encrypt。我认为这是一个比你要问的更好的方法。