Java 2014年,人们应该如何在Android上加密数据?

Java 2014年,人们应该如何在Android上加密数据?,java,android,encryption,bouncycastle,spongycastle,Java,Android,Encryption,Bouncycastle,Spongycastle,我想在Android原生Java应用程序中使用公钥/私钥对加密和解密数据。我在浏览旧帖子/文档时遇到困难 据我了解: 早期版本的Android使用了一个残缺版本的bouncy castle加密库。特别是它不包括椭圆曲线方法 椭圆曲线密码是移动设备上的一种加密方式,因为较小的密钥大小意味着更少的计算量和/或更安全 人们建议包括您自己的bouncy castle库副本,以获得除重命名软件包之外的全部功能(或使用spongy castle,即bouncy castle和重命名的软件包) Androi

我想在Android原生Java应用程序中使用公钥/私钥对加密和解密数据。我在浏览旧帖子/文档时遇到困难

据我了解:

  • 早期版本的Android使用了一个残缺版本的bouncy castle加密库。特别是它不包括椭圆曲线方法

  • 椭圆曲线密码是移动设备上的一种加密方式,因为较小的密钥大小意味着更少的计算量和/或更安全

  • 人们建议包括您自己的bouncy castle库副本,以获得除重命名软件包之外的全部功能(或使用spongy castle,即bouncy castle和重命名的软件包)


  • Android的更高版本在某种程度上发生了变化,允许用户使用BouncyCastle而无需重命名软件包

  • 甚至更高版本的Android也开始包括功能齐全的bouncy castle

所以问题是——截至2014年6月,我们应该如何在Android上加密数据


github上是否有任何简单的项目以“正确的方式”做事?

我最近研究了加密主题,并想出了三种方法:

1) 使用默认的Java/Android实现(我假设是您提到的),Java Crypto API:+

2) 使用最近提供的Facebook库:

3) 使用OpenSSL API(使用NDK):


找到最好的答案将是一个困难的/主观的答案。

我投票结束这个问题有几个原因。首先,它太宽泛;密码学及其用途千差万别,即使你把它缩小到如何加密移动设备上的“数据”。持久数据和传输数据、受监管数据等都有不同的技术、实践和建议。此外,你的问题是一个“适当方式”问题,这意味着它是主观的,需要的是意见,而不是明确的事实。最后,您需要的是来自互联网的样本或喜爱的非网站资源,这在StackOverflow上被认为是离题的。“Android的更高版本在某种程度上改变了,允许您使用bouncy castle,而无需重命名软件包”——我不知道是这样的情况。“即使是更高版本的Android也开始包括功能齐全的bouncy castle”——bouncy castle仍然不是Android SDK的一部分,因此开发人员不应该对此做出任何假设。而且,除了格雷先生提到的所有问题之外,你还没有说明你在为谁辩护,参与公钥/私钥交换的各方都是谁等等。这太广泛了,但对于非对称加密,使用带有OAEP填充的RSA 4096或256位ECIE应该可以保护你一段时间。请注意,我已经了解到,目前Bouncy中的EC计算是次优的。谢谢greven!我会看看这些选项。我想我们不允许在堆栈溢出上讨论这个问题,所以我将寻找另一个论坛来讨论它。“许多好问题都会根据专家经验产生一定程度的意见,但对这个问题的回答往往几乎完全基于意见,而不是事实、参考资料或具体的专业知识。如果可以重新编写此问题以符合帮助中心的规则,请编辑此问题或留下评论。“他们希望您更具体地说明加密的目的,以及您试图解决的具体问题。问什么是加密数据的最佳方式就像问什么是最好的智能手机,或者什么是最好的汽车。你的类比很弱,但让我们以智能手机为例。想象一下,有人在监狱里呆了20年,当他们出来问你,“什么是最好的智能手机?”你可以这样回答“在这一点上,大多数人根据手机OS-IOS或Android分为两组。安卓的优越性在于a和b。虽然人们争论d e和f。具体来说,Nexus5是目前最适合我的手机,因为x、y和z“或者你可以直视他们的眼睛说”无法回答问题。不足够地信息。“哪个更有用?