33

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

那么是否可以在数据存储在共享首选项中之前自动加密数据?还是有更好的方法/地方来存储非常重要的数据?

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

4

10 回答 10

50

您还可以查看我为执行此操作而制作的此类:https ://github.com/sveinungkb/encrypted-userprefs

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

于 2012-06-04T16:24:27.690 回答
32

1)。如何加密?

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

JCA 参考指南

这是 JCA API 使用的示例(特别是 AES 算法)。

2)。在哪里存放?

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

更新:从 API 级别 8 开始,API 具有android.util.Base64.

于 2011-02-05T23:06:40.207 回答
3

我建议几乎每次都在 Android 上使用Facebook Conceal进行加密——它是一个快速的 Android 库,可以做出一些非常明智的决定,并为您提供一些简单的界面来实际完成工作。

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

于 2015-05-16T18:59:46.340 回答
3

你应该看看Slink。我开始意识到大多数 SharedPreferences 加密工具对您所做的每个操作都使用加密,这意味着每个键值对仅在键和值都分别加密后保存。这会产生很大的性能开销。

所以我搜索了一个库,它会给我一个更有效的加密过程,我找到了 Slink。Slink 使用 Facbook 的 Conceal 库将对象的整个映射保存为一个整体,使其成为最高效、最快速的 SharedPreferences 加密解决方案。它还使用常见的 Android 的 SharedPreferences 接口,这使得使用非常简单,几乎无缝。免责声明:我是开发这个库的开发团队的一员。

于 2016-11-07T14:05:31.433 回答
2

请参阅重复:混淆/加密 SharedPreferences 文件可能吗?

嗨,我已经使用 AES 加密创建了 SharedPreferences 实现。该项目是一个Maven模块。如果你需要一个,看看。https://github.com/kovmarci86/android-secure-preferences

于 2013-02-02T13:24:26.043 回答
1

尝试使用我们的https://github.com/BottleRocketStudios/Android-Vault Vault 组件。它将使用 Android 的 Keystore(在受支持的设备上)或混淆技术来加密 SharedPreference 文件中的值并实现 SharedPreference 接口,因此它在很大程度上是一个替代品。

于 2016-04-22T15:21:09.777 回答
1

facebook 推出的新加密 - 隐藏加密.. 易于使用

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

于 2017-04-07T01:48:02.223 回答
0

这篇关于 codeproject 的文章包含一个很好的共享首选项包装器。但是,类名SecurePreferences具有误导性,例如ObfuscatedPreferences更合适的名称。

于 2013-05-29T14:32:57.080 回答
0

有一个使用 Facebook Conceal 加密数据的 Android 库。

https://github.com/rtoshiro/SecureSharedPreferences

Maven 中心:

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

于 2015-06-12T13:48:23.957 回答
0

您可以对偏好设置中的数据进行加密,并将加密密钥保存在 Android Keystore系统中。这样,您的加密密钥也将是安全的。

您可以查看执行此操作的库 https://github.com/ophio/secure-preferences

于 2015-06-29T14:12:50.513 回答