加密SharedPreferences中的数据

Sim*_*mon 31 encryption android oauth sharedpreferences

我正在开发oAuth 1和2访问webservices的框架,我的问题是,如何以安全的方式存储像oAuth访问密钥这样的敏感数据?这个键的问题在于某些平台如twitter会使用永久密钥,如果有人可以访问此密钥,他可以使用用户的Twitter帐户做任何他想做的事情.

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

更新 - 另请阅读:在Android应用程序中存储用户设置的最合适方法是什么

Sve*_*ken 50

您还可以查看我为此做的这个类:https://github.com/sveinungkb/encrypted-userprefs

它使用AES而不是其他建议中使用的弃用和弱DES.

  • 谢谢.这非常需要.我想如果你添加JavaDocs,那将更加惊人.:) (3认同)
  • 我会调查一下苏菲安,谢谢! (2认同)

Vit*_*nko 32

1).如何加密?

在Android上,加密是通过Java Cryptography Architecture(JCA)完成的.主要是javax.crypto.*包装.

JCA参考指南

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

2).在哪里存放?

加密API使用字节数组(不是字符串)进行操作.这意味着您可以使用SharedPreferences,但是在加入之前您需要在加密的字节数组上应用Base-64编码SharedPreferences(否则XML解析器将无法读取共享首选项文件).然后阅读你将需要使用Base-64解码.请注意,默认情况下,大多数Android操作系统版本没有内置的Base-64 API(请参阅更新部分).因此,要删除此Base-64开销,我建议您将字节存储在私有文件中.

更新:自API级别8以来,API具有android.util.Base64.