5

我需要通过使用至少 128 位密钥对其进行加密来存储一些敏感数据。我调查了 javax.crypto 包,发现有某些密码名称,如 PBEWithMD5AndDES 或 PBEWithSHA1AndDESede,它们提供高达 56 位和 80 位的加密(http://en.wikipedia.org/wiki/DESede)。

我提到了其他人的帖子,但那些主要使用 RSA,据我了解,RSA 通常适用于加密通信数据(使用私钥-公钥对)。我的需求不同,我只想存储数据并通过解密将其取回。因此我不需要任何私钥-公钥对。

如果您对此有任何想法,请告诉我。

4

6 回答 6

8

使用高级加密标准(AES)。它支持 128、192 或 256 位的密钥长度。

算法很简单。Sun Java 网站有一个部分解释了如何在 Java 中进行 AES 加密。

从维基百科...

... 高级加密标准 (AES),也称为 Rijndael,是美国政府采用的一种分组密码作为加密标准。它已经过广泛的分析,现在在全球范围内使用,就像它的前身数据加密标准 (DES) 一样......

因此,根据经验,您不应该使用 DES 或其变体,因为它正在被逐步淘汰。

到目前为止,最好使用 AES。还有其他选项,例如TwofishBlowfish等。请注意,Twofish 可以被视为 Blowfish 的高级版本。

于 2008-09-08T07:01:45.567 回答
4

我过去在http://www.bouncycastle.org/上取得了很好的成功(他们也有 C# 版本)。

于 2008-09-08T07:18:57.833 回答
3

您需要为您的 JDK 下载并安装无限强度的 JCE 策略文件。对于 JDK 6,它位于最底部的http://java.sun.com/javase/downloads/index.jsp 。

于 2008-09-08T06:20:51.780 回答
2

结合 3 个不同的回复给出了我认为正确的答案。

从Bouncycastle下载加密库,然后您需要从Oracle下载“Unlimited Strength Jurisdiction Policy” (文件位于下载页面底部)。确保您阅读了有关如何安装它的自述文件。

完成此操作后,并使用 Bountycastle 包提供的示例代码,您应该能够加密您的数据。您可以使用三重 DES 实现,这将为您提供 112 位密钥(通常称为 128 位,但实际上只有 112 位是安全的),或者如前所述,您可以使用 AES。我的钱会花在 AES 上。

于 2008-09-08T08:34:13.283 回答
0

无论如何,我都不是加密专家(所以请对这个建议持保留态度),但我以前使用过Blowfish,我认为你可以将它用于你需要的东西。同一个人还有一个更新的算法,叫做Twofish

这是一个带有 Java 实现的网站,但要注意许可证(它说免费用于非商业用途)。您也可以从Bruce Schneier 的网站(这两种算法的创建者)找到该链接。

于 2008-09-08T06:26:39.783 回答
0

感谢 Michael,在 JCE 中尝试了很多东西后,我终于选择了 bouncycastle。

JCE 支持 AES 加密和 PBE 基于密码的加密,但它不支持两者的组合。我想要同样的东西,我在 bouncycastle 找到了。

该示例位于: http: //forums.sun.com/thread.jspa?messageID=4164916

于 2008-09-08T09:29:13.293 回答