需要有关加密/解密存储在Android上的SQLite数据库中的数据的好方法的建议

时间:2010-04-09 18:07:24

标签: database android sqlite encryption

我有一些敏感数据存储在SQLite中,适用于Android应用。我需要能够在持久化时加密,但在从数据库反序列化时也需要解密。不确定我在Android上的选项是什么?

6 个答案:

答案 0 :(得分:5)

Android中没有内置加密数据库内容的功能。您可以自己加密/解密值并将加密的材料存储在数据库中,但这取决于您,并且必须逐个单元地完成。

对于加密算法,Android内置了javax.crypto

另外,请记住,如果您的加密密钥已粘贴到您的应用程序中,任何关心的人都可以通过您的加密。

答案 1 :(得分:1)

您可能需要查看有关读取/写入受密码保护的zip文件的this SO question。它包含一些指向执行这些任务的OSS库的链接。虽然您不一定对压缩感兴趣,但这可能会解决在启动时解密db的问题,然后您可以简单地将修改后的数据库写回加密文件。

@CommonsWare绝对正确,将密码/密钥烘焙到您的应用程序意味着真正想要的人可以获取您的数据。但是,我认为这会阻止大多数人通过琐碎的方式刷数据。

答案 2 :(得分:1)

这里没有简单的答案。猜猜我只是使用简单的东西来序列化时破坏列值。

答案 3 :(得分:0)

如果您需要加密数据库,您可能会使用登录到您的应用程序以确保安全性,对吗?为什么不让您的登录服务器存储加密的“密码”,登录后,拉出“密码”并存储代码(在公共字符串中,而不是实际文件或首选项)。这样,如果某人反编译您的应用,他们仍然无法解密数据,您的数据将是安全的。

然后使用:

每次应用程序卸载时,在Destroy()上清除代码。

答案 4 :(得分:0)

尝试SQLCipher加密数据库..

答案 5 :(得分:-2)

您可以尝试在SHA1中加密

public static String encriptSHA1(String password){
        String hash = "";

        try {
            MessageDigest md;
            byte[] buffer, digest;

            buffer = password.getBytes();
            md = MessageDigest.getInstance("SHA1");

            md.update(buffer);
            digest = md.digest();

            for(byte aux : digest) {
                int b = aux & 0xff;
                if (Integer.toHexString(b).length() == 1) hash += "0";
                hash += Integer.toHexString(b);
            }
        } catch (NoSuchAlgorithmException e) {
        }

        return hash;
    }