7

我想知道:

我们可以Context.MODE_PRIVATESQLite创建数据库时使用以防止不必要的数据库访问。

我在谷歌上没有得到任何例子。
如何Context.MODE_PRIVATE在数据库中使用它。
请帮助我。提供任何链接或示例。

在此链接中,他们正在谈论文件。所以数据库也是文件。

我该如何实施?

4

3 回答 3

0

正如 commonsware 所提到的,内部存储上的 SQLite 数据库默认是私有的。但正如其他人提到的那样,植根手机始终可以访问您的文件。

相反,您可以使用任何加密算法将数据保存在数据库中,这将帮助您限制可读性,除非入侵者知道加密算法。

您不能在 SQLite 中设置“Context.MODE_PRIVATE”标志。

于 2013-03-12T05:48:24.230 回答
0

创建数据库时,以下语法很有用

openOrCreateDatabase(String path, int mode, SQLiteDatabase.CursorFactory factory)

例如,

openOrCreateDatabase("StudentDB",Context.MODE_PRIVATE,null);

在这个网站上查看我的教程。

于 2013-03-12T05:55:45.213 回答
0

选项 1:使用SQLcipher

选项 2:安全方法永远没有机会破解。它并不完美,但总比没有好。

1)使用此功能插入数据:

public static String getEncryptedString(String message) {
    String cipherText = null;

    try {
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(("YOUR-SECURE-PASSWORD-KEY").getBytes(), "AES"));
        byte[] bytes = cipher.doFinal(message.getBytes());
        cipherText = Base64.encodeToString(bytes, Base64.DEFAULT);
    } catch(Exception ex) {
        cipherText = "Error in encryption";
        Log.e(TAG , ex.getMessage());
        ex.printStackTrace();
    }

    return cipherText;
}

2)从数据库中获取数据并传入该函数参数:

//This function returns output string 
public static String getDecryptedString(String encoded) {
    String decryptString = null;

    try {
        byte[] bytes = Base64.decode(encoded, Base64.DEFAULT);

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(("YOUR-SECURE-PASSWORD-KEY").getBytes() , "AES"));
        decryptString = new String(cipher.doFinal(bytes), "UTF-8");
    } catch(Exception ex) {
        decryptString = "Error in decryption";
        ex.printStackTrace();
    }

    return decryptString;
}

3) 这些方法的好处: - 没有正确的密钥就不可能解密。- AES 加密是一种非常安全的加密方法。

4) 将您的 AES 密钥存储在 c++ 文件中。

于 2019-07-22T05:22:23.447 回答