在SharedPreferences中encryption数据

我目前正在开发一个框架oAuth 1和2访问Web服务,我的问题是,我如何以安全的方式存储敏感数据,如oAuth访问密钥? 这个键的问题是像twitter这样的平台使用永久密钥,如果有人可以访问这个键,他可以做任何他想要的用户Twitter帐户..

那么在将数据存储到共享首选项之前是否可以自动encryption数据呢? 还是有更好的方式/地方来存储非常重要的数据?

更新 – 还请阅读: 在Android应用程序中存储用户设置的最合适的方式是什么?

  • 使用哪种Android数据存储技术?
  • Android 2.2数据备份:如何备份DefaultSharedPreferences?
  • Androidunit testing:如何清除SharedPreferences
  • 如何遍历所有Bundle对象
  • 应用程序通过“强制停止”或任务pipe理器终止后,Sharedpreference byte 值被清除
  • 如何将多个JSONObjects放入/获取到JSONArray?
  • BackupManager未调用备份传输
  • 共享首选项与数据库
  • 1)。 如何encryption?

    在Android上,encryption通过Java密码体系结构(JCA)完成。 主要是javax.crypto.*包。

    JCA参考指南

    以下是JCA API使用示例 (特别是AES alrorithm)。

    2)。 在哪里存储?

    encryptionAPI使用字节数组(而不是string)进行操作。 这意味着您可以使用SharedPreferences ,但是在将其放入SharedPreferences之前,您需要在encryption的字节数组上应用Base-64编码(否则XMLparsing器将无法读取共享的首选项文件)。 然后阅读你将需要使用Base-64解码。 请注意,默认情况下,大多数Android操作系统版本没有内置的Base-64 API(请参阅UPDATE部分)。 所以要删除这个Base-64开销,我会build议只是将你的字节存储在一个私有文件中 。

    更新:由于API级别8,API有android.util.Base64

    你也可以看看我做的这个类完全是这样的: https : //github.com/sveinungkb/encrypted-userprefs

    它使用AES而不是在另一个build议中使用的已弃用和弱的DES。

    查看重复: 混淆/encryptionSharedPreferences文件可能吗?

    嗨,我已经创build了一个使用AESencryption的SharedPreferences实现。 该项目是一个maven模块。 如果你需要的话,看看。 https://github.com/kovmarci86/android-secure-preferences

    我几乎每次都会推荐在Android上使用Facebook Conceal进行encryption – 这是一个快速的Android库,它可以做出一些非常明智的决定,并为您提供一些简单的接口来完成工作。

    奖金! 我最近拼凑了如何从Xamarin中使用它的难题 – 请参阅关于使用隐藏来保护您的C#应用​​程序数据以获取更多信息的文章。

    你应该看看Slink 。 我开始意识到,大部分SharedPreferencesencryption工具对您所做的每个操作都使用encryption,也就是说,只有在密钥和值都被encryption后,才能保存每个键值对。 这会造成很大的性能开销。

    于是我search了一个能够给我一个更高效的encryption过程的库,我发现了Slink。 Slink使用Facbook的隐藏库来保存整个对象的整个地图,使其成为最有效,最快的SharedPreferencesencryption解决scheme。 它还使用常见的Android的SharedPreferences接口,这使得使用非常简单,几乎无缝。 免责声明:我是开发这个库的开发团队的一部分。

    尝试使用我们的https://github.com/BottleRocketStudios/Android-Vault Vault组件。 它将使用Android的Keystore(在支持的设备上)或Obfuscation技术对SharedPreference文件中的值进行encryption,并实现SharedPreference接口,因此它主要是一种简单replace。

    由Facebook推出的新encryption – 隐藏encryption易于使用

    https://github.com/afiqiqmal/ConcealSharedPreference-Android

    这篇关于codeproject的文章包含了一个很好的共享首选项包装器。 然而,类名称SecurePreferences误导类似ObfuscatedPreferences会更合适。

    有一个使用Facebook隐藏encryption数据的Android库。

    https://github.com/rtoshiro/SecureSharedPreferences

    Maven中央:

    compile 'com.github.rtoshiro.securesharedpreferences:securesharedpreferences:1.0.+'

    您可以在首选项中encryption数据,并将encryption密钥保存在Android Keystore系统中。 这样你的encryption密钥也是安全的。

    你可以看看这个https://github.com/ophio/secure-preferences