我目前正在开发oAuth 1和2访问webservices的框架,我的问题是,如何以安全的方式存储像oAuth访问密钥这样的敏感数据? 这个键的问题在于像twitter这样的平台使用永久密钥,如果有人可以访问这个密钥,他可以用用户的Twitter帐户做任何他想做的事情。
在将数据存储到共享首选项之前,是否可以自动加密数据?或者有更好的方式/地方存储非常重要的数据吗?
更新 - 也阅读:What is the most appropriate way to store user settings in Android application
答案 0 :(得分:50)
您还可以查看我为此完成此课程所做的课程:https://github.com/sveinungkb/encrypted-userprefs
它使用AES而不是其他建议中使用的弃用和弱DES。
答案 1 :(得分:32)
<强> 1)。如何加密?
在Android上,加密是通过Java Cryptography Architecture(JCA)完成的。主要是javax.crypto.*
包。
以下是JCA API使用的example(特别是AES alrorithm)。
<强> 2)。在哪里储存?
加密API使用字节数组(不是字符串)进行操作。这意味着您可以使用SharedPreferences
,但是在将加密字节数组放入SharedPreferences
之前,您需要对加密字节数组应用Base-64编码(否则XML解析器将无法读取共享首选项文件)。然后阅读你将需要使用Base-64解码。请注意,默认情况下,大多数Android操作系统版本没有内置的Base-64 API(请参阅更新部分)。因此,要删除此Base-64开销,我建议您将字节存储在private file。
更新:自API级别8起,API已android.util.Base64
。
答案 2 :(得分:3)
我建议几乎每次都使用Facebook Conceal在Android上进行加密 - 这是一个快速的Android库,可以做出一些非常明智的决定,并为您提供一些简单的界面来实际完成工作。
奖金!我最近拼凑了如何在Xamarin中使用它的难题 - 请参阅我在securing your C# app's data using conceal上的文章以获取更多信息。
答案 3 :(得分:3)
你应该看看Slink。 我开始意识到大多数SharedPreferences加密工具都会对您所做的每个操作使用加密,这意味着只有在密钥和值分别加密后才能保存每个键值对。这会产生很大的性能开销。
所以我搜索了一个库,它会给我一个更有效的加密过程,我找到了Slink。 Slink使用Facbook的Conceal库来整体保存整个对象图,使其成为最有效,最快速的SharedPreferences加密解决方案。它还使用常见的Android的SharedPreferences接口,这使得使用非常简单,几乎无缝。 免责声明:我是开发此库的开发团队的一员。
答案 4 :(得分:2)
请参阅重复:Obfuscate/Encrypt SharedPreferences file possible?
嗨,我已经使用AES创建了一个SharedPreferences实现 encryiption。该项目是一个maven模块。如果你需要一个,请拿一个 看。 https://github.com/kovmarci86/android-secure-preferences
答案 5 :(得分:1)
尝试使用我们的https://github.com/BottleRocketStudios/Android-Vault保险库组件。它将使用Android的Keystore(在支持的设备上)或Obfuscation技术来加密SharedPreference文件中的值并实现SharedPreference接口,因此它主要是替代品。
答案 6 :(得分:1)
新加密由facebook推出 - 隐藏加密..易于使用
https://github.com/afiqiqmal/ConcealSharedPreference-Android
答案 7 :(得分:0)
This article包含共享首选项的一个很好的包装器。但是,类名SecurePreferences
具有误导性,例如ObfuscatedPreferences
更合适。
答案 8 :(得分:0)
有一个使用Facebook Conceal加密数据的Android库。
https://github.com/rtoshiro/SecureSharedPreferences
Maven Central:
compile 'com.github.rtoshiro.securesharedpreferences:securesharedpreferences:1.0.+'
答案 9 :(得分:0)
您可以加密首选项中的数据,并将加密密钥保存在Android Keystore系统中。这样您的加密密钥也是安全的。
您可以查看执行此操作的库 https://github.com/ophio/secure-preferences