Android - 如何完全保护存储在 sharedPreferences 中的值?
Android - How to completely secure values stored in sharedPreferences?
据我了解,可以检索存储在 SharedPreferences
中的数据。因此它不安全。有人可以建议我完全保护数据的方法吗?我知道可以加密存储数据,但我想知道,还有其他方法吗?
共享首选项作为文件存储在设备的文件系统中。默认情况下,它们存储在应用程序的数据目录中,并设置了文件系统权限,仅允许特定应用程序运行时使用的 UID 访问它们。
因此,它们是私有的,因为 Linux 文件权限限制了对它们的访问,与在任何 Linux/Unix 系统上一样。
任何对设备具有 root 级别访问权限的人都可以看到它们,因为 root 可以访问文件系统上的所有内容。
如果您担心此类访问您的首选项(或您的应用程序写入的任何数据),那么您需要对其进行加密。你可以google出来。
如果使用 Context.MODE_PRIVATE 创建,存储在 SharedPreferences 中的数据只能由您自己的应用程序访问。
不过,如果用户 phone 是 root 用户,那么数据可以被 root 应用程序读取(即使是使用 Context.MODE_PRIVATE 创建的)。
永远无法避免这种情况。但是您可以采取一些预防措施,例如在 SharedPreferences 中加密数据。
SecurePreferences 库就是一个很好的例子:https://github.com/scottyab/secure-preferences
试试这个 https://prashantsolanki3.github.io/Secure-Pref-Manager/ 以轻松使用共享首选项,它还会在将密钥和值保存在首选项中之前对其进行加密。
保存值的示例代码:
SecurePrefManager.with(this)
.set("user_name")
.value("LoremIpsum")
.go();
据我了解,可以检索存储在 SharedPreferences
中的数据。因此它不安全。有人可以建议我完全保护数据的方法吗?我知道可以加密存储数据,但我想知道,还有其他方法吗?
共享首选项作为文件存储在设备的文件系统中。默认情况下,它们存储在应用程序的数据目录中,并设置了文件系统权限,仅允许特定应用程序运行时使用的 UID 访问它们。
因此,它们是私有的,因为 Linux 文件权限限制了对它们的访问,与在任何 Linux/Unix 系统上一样。
任何对设备具有 root 级别访问权限的人都可以看到它们,因为 root 可以访问文件系统上的所有内容。
如果您担心此类访问您的首选项(或您的应用程序写入的任何数据),那么您需要对其进行加密。你可以google出来。
如果使用 Context.MODE_PRIVATE 创建,存储在 SharedPreferences 中的数据只能由您自己的应用程序访问。
不过,如果用户 phone 是 root 用户,那么数据可以被 root 应用程序读取(即使是使用 Context.MODE_PRIVATE 创建的)。
永远无法避免这种情况。但是您可以采取一些预防措施,例如在 SharedPreferences 中加密数据。
SecurePreferences 库就是一个很好的例子:https://github.com/scottyab/secure-preferences
试试这个 https://prashantsolanki3.github.io/Secure-Pref-Manager/ 以轻松使用共享首选项,它还会在将密钥和值保存在首选项中之前对其进行加密。
保存值的示例代码:
SecurePrefManager.with(this)
.set("user_name")
.value("LoremIpsum")
.go();