保护本地 SQLite 数据库(Android 应用程序)
Protecting Local SQLite Database (Android Application)
我们有一个 Android 应用程序,它将其数据存储在本地 SQLite 数据库中;主要是为了性能,但也允许离线工作(因为我们经常在信号较弱的区域)。
目前,数据以加密格式存储(从我们的网络服务器传递下来),但这本身会导致性能问题,例如,如果我们要搜索特定的记录 "surname",我们需要解密所有数据,而不是使用直接的 SQL 查询,以包括 where surname='Smith'
我们不能(就目前而言)将数据存储在更友好的 'open-format' 中,因为可以 'root' 设备,复制 MySQL 数据库,打开它并读取数据。
是否有办法(也许有人可以提供示例)密码保护本地 SQLite 数据库或以某种方式应用加密,以便我们可以(从应用程序的角度)在开放格式,但这样一来,如果任何潜在的黑客获得了设备并对其进行了 root 操作……他们将很难读取我们的数据?
我已经搜索了合适的解决方案,但找不到 SQLite 数据库的任何选项、任何第 3 方软件或执行此操作的任何代码示例。
SqlCipher,这可能适用于您的情况
远程存储:
您的数据很敏感,用户需要通过不同的设备随时随地访问。如果您的应用程序是一个好应用程序,那么上面的行将适用。
安全性 + 从任何设备进行远程访问表示您在远程服务器上维护您的 dB。
您的流量可以是:
用户登录 --> 令牌 --> 每次调用中的身份验证令牌 --> 处理请求和 get/put 数据 in/from dB
本地存储:
假设您只想将数据存储在本地,不想将其存储在服务器上。为此,您可以使用 public-key cryptography
您可以在您的应用程序中使用 public 密钥来加密数据并存储它。现在,您想要访问数据。向服务器请求私钥并解密。
同样,要访问私钥,您应该使用某种形式的授权(或者任何人都可以访问您的密钥)。
没有私钥,即使黑客root了phone并his/her拿到了dB,数据也没有用。
我们有一个 Android 应用程序,它将其数据存储在本地 SQLite 数据库中;主要是为了性能,但也允许离线工作(因为我们经常在信号较弱的区域)。
目前,数据以加密格式存储(从我们的网络服务器传递下来),但这本身会导致性能问题,例如,如果我们要搜索特定的记录 "surname",我们需要解密所有数据,而不是使用直接的 SQL 查询,以包括 where surname='Smith'
我们不能(就目前而言)将数据存储在更友好的 'open-format' 中,因为可以 'root' 设备,复制 MySQL 数据库,打开它并读取数据。
是否有办法(也许有人可以提供示例)密码保护本地 SQLite 数据库或以某种方式应用加密,以便我们可以(从应用程序的角度)在开放格式,但这样一来,如果任何潜在的黑客获得了设备并对其进行了 root 操作……他们将很难读取我们的数据?
我已经搜索了合适的解决方案,但找不到 SQLite 数据库的任何选项、任何第 3 方软件或执行此操作的任何代码示例。
SqlCipher,这可能适用于您的情况
远程存储:
您的数据很敏感,用户需要通过不同的设备随时随地访问。如果您的应用程序是一个好应用程序,那么上面的行将适用。
安全性 + 从任何设备进行远程访问表示您在远程服务器上维护您的 dB。
您的流量可以是:
用户登录 --> 令牌 --> 每次调用中的身份验证令牌 --> 处理请求和 get/put 数据 in/from dB
本地存储:
假设您只想将数据存储在本地,不想将其存储在服务器上。为此,您可以使用 public-key cryptography
您可以在您的应用程序中使用 public 密钥来加密数据并存储它。现在,您想要访问数据。向服务器请求私钥并解密。
同样,要访问私钥,您应该使用某种形式的授权(或者任何人都可以访问您的密钥)。
没有私钥,即使黑客root了phone并his/her拿到了dB,数据也没有用。