Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android,如何为离线应用保留本地加密数据库的密钥?_Android_Database_Sqlite_Encryption - Fatal编程技术网

Android,如何为离线应用保留本地加密数据库的密钥?

Android,如何为离线应用保留本地加密数据库的密钥?,android,database,sqlite,encryption,Android,Database,Sqlite,Encryption,我正在编写简单的脱机字典应用程序。所有数据都存储在SQLite数据库中 若我们假设数据库是加密的,那个么应用程序必须使用某种密钥,才能访问它。此外,我们假设此应用程序完全处于脱机状态,并且不访问任何远程服务器 这意味着键将存储在应用程序本身中。我试图找出很多在应用程序中隐藏这个键的方法,但它们都有缺陷 甚至可以在应用程序本身中隐式隐藏此键吗?如果应用程序自动显示数据,则无法保护该数据 你的应用程序必须将密钥存储在某个位置。无论您试图对代码进行多少模糊处理,仍然可以对其进行反编译(或者只执行模糊处

我正在编写简单的脱机字典应用程序。所有数据都存储在SQLite数据库中

若我们假设数据库是加密的,那个么应用程序必须使用某种
密钥
,才能访问它。此外,我们假设此应用程序完全处于
脱机状态
,并且不访问任何远程服务器

这意味着
将存储在应用程序本身中。我试图找出很多在应用程序中隐藏这个
键的方法,但它们都有缺陷

甚至可以在应用程序本身中隐式隐藏此
键吗?

如果应用程序自动显示数据,则无法保护该数据

你的应用程序必须将密钥存储在某个位置。无论您试图对代码进行多少模糊处理,仍然可以对其进行反编译(或者只执行模糊处理的部分,直到密钥出来)

或者从另一个角度来看:隐藏密钥是加密的一种形式。因此,现在需要第二个密钥来加密/解密第一个密钥。(但在模糊处理中,“密钥”是程序结构,比真正的加密算法更不安全。)


保护数据的唯一方法是在使用应用程序时,通过要求用户输入密钥(作为密码或某些单独的令牌)来避免存储密钥。
这意味着信任用户不会泄露密钥。

您想要一个常量密钥来解密数据库吗?不,不可能。但即使是这样,你怎么能防止暴力强迫密钥解密数据库呢?看看这个:@JörnBuitink,我认为如果我们使用正确的密钥组合,AES-256可以很好地防止暴力。加密应该完成什么?如果你的应用程序自动解密并显示数据,它不会受到太多保护,是吗?隐藏是不可能的,因为你的应用程序必须能够实际使用密钥。即使我通过服务器向用户发送密钥,它仍然可以被破解,仅仅因为数据库存储在应用程序的本地?服务器如何区分真正的应用程序和邪恶的应用程序?