我目前正在为 oAuth 1 和 2 访问 web 服务开发一个框架,我的问题是,我如何以安全的方式存储敏感数据,如 oAuth 访问密钥?这个密钥的问题是,像 twitter 这样的一些平台使用永久密钥,如果有人可以访问这个密钥,他可以对用户的 twitter 帐户做任何他想做的事情。
那么是否可以在数据存储在共享首选项中之前自动加密数据?还是有更好的方法/地方来存储非常重要的数据?
更新 - 另请阅读:在 Android 应用程序中存储用户设置的最合适方式是什么
我目前正在为 oAuth 1 和 2 访问 web 服务开发一个框架,我的问题是,我如何以安全的方式存储敏感数据,如 oAuth 访问密钥?这个密钥的问题是,像 twitter 这样的一些平台使用永久密钥,如果有人可以访问这个密钥,他可以对用户的 twitter 帐户做任何他想做的事情。
那么是否可以在数据存储在共享首选项中之前自动加密数据?还是有更好的方法/地方来存储非常重要的数据?
更新 - 另请阅读:在 Android 应用程序中存储用户设置的最合适方式是什么
您还可以查看我为执行此操作而制作的此类:https ://github.com/sveinungkb/encrypted-userprefs
它使用 AES 而不是其他建议中使用的已弃用和弱 DES。
1)。如何加密?
在 Android 上,加密是通过 Java Cryptography Architecture (JCA) 完成的。主要是javax.crypto.*
包。
这是 JCA API 使用的示例(特别是 AES 算法)。
2)。在哪里存放?
加密 API 使用字节数组(不是字符串)进行操作。这意味着您可以使用SharedPreferences
,但您需要在将加密字节数组放入之前对其应用 Base-64 编码SharedPreferences
(否则 XML 解析器将无法读取共享首选项文件)。然后要阅读,您将需要使用 Base-64 解码。请注意,默认情况下,大多数 Android 操作系统版本都没有内置的 Base-64 API(请参阅更新部分)。因此,为了消除这种 Base-64 开销,我建议将您的字节存储在一个私有文件中。
更新:从 API 级别 8 开始,API 具有android.util.Base64
.
我建议几乎每次都在 Android 上使用Facebook Conceal进行加密——它是一个快速的 Android 库,可以做出一些非常明智的决定,并为您提供一些简单的界面来实际完成工作。
奖金!我最近拼凑了如何从 Xamarin 使用它的难题 - 请参阅我关于使用隐藏保护 C# 应用程序数据的文章以获取更多信息。
你应该看看Slink。我开始意识到大多数 SharedPreferences 加密工具对您所做的每个操作都使用加密,这意味着每个键值对仅在键和值都分别加密后保存。这会产生很大的性能开销。
所以我搜索了一个库,它会给我一个更有效的加密过程,我找到了 Slink。Slink 使用 Facbook 的 Conceal 库将对象的整个映射保存为一个整体,使其成为最高效、最快速的 SharedPreferences 加密解决方案。它还使用常见的 Android 的 SharedPreferences 接口,这使得使用非常简单,几乎无缝。免责声明:我是开发这个库的开发团队的一员。
请参阅重复:混淆/加密 SharedPreferences 文件可能吗?
嗨,我已经使用 AES 加密创建了 SharedPreferences 实现。该项目是一个Maven模块。如果你需要一个,看看。https://github.com/kovmarci86/android-secure-preferences
尝试使用我们的https://github.com/BottleRocketStudios/Android-Vault Vault 组件。它将使用 Android 的 Keystore(在受支持的设备上)或混淆技术来加密 SharedPreference 文件中的值并实现 SharedPreference 接口,因此它在很大程度上是一个替代品。
facebook 推出的新加密 - 隐藏加密.. 易于使用
https://github.com/afiqiqmal/ConcealSharedPreference-Android
这篇关于 codeproject 的文章包含一个很好的共享首选项包装器。但是,类名SecurePreferences
具有误导性,例如ObfuscatedPreferences
更合适的名称。
有一个使用 Facebook Conceal 加密数据的 Android 库。
https://github.com/rtoshiro/SecureSharedPreferences
Maven 中心:
compile 'com.github.rtoshiro.securesharedpreferences:securesharedpreferences:1.0.+'
您可以对偏好设置中的数据进行加密,并将加密密钥保存在 Android Keystore系统中。这样,您的加密密钥也将是安全的。
您可以查看执行此操作的库 https://github.com/ophio/secure-preferences