使用Java进行128位数据加密
我需要通过使用至少128位密钥对其进行加密来存储一些敏感数据。我调查了javax.crypto软件包,发现其中有一些密码名称,例如
PBEWithMD5AndDES或者PBEWithSHA1AndDESede提供高达56位和80位的加密(http://en.wikipedia.org/wiki/DESede)。
我提到了其他人的帖子,但是这些帖子主要使用RSA,据我所知,RSA通常适合加密通信数据(使用私钥-公钥对)。我的需求有所不同,我只想存储数据并通过解密将其取回。因此,我不需要任何私钥-公钥对。
如果我们对此有任何想法,请告诉我。
解决方案
回答
我们需要为JDK下载并安装无限强度的JCE策略文件。对于JDK 6,它位于最底部的http://java.sun.com/javase/downloads/index.jsp。
回答
无论如何,我都不是加密专家(因此,建议带着一粒盐),但是我以前使用过河豚鱼,我认为我们可以根据需要使用它。同一个人还提供了一种更新的算法,称为Twofish。
这是一个具有Java实现的网站,但是要小心许可(对于非商业用途,它说是免费的)。我们也可以从Bruce Schneier的网站(两种算法的创建者)中找到该链接。
回答
使用高级加密标准(AES)。它支持128、192或者256位的密钥长度。
该算法很简单。 Sun Java网站的一节介绍了如何在Java中进行AES加密。
从维基百科...
... the Advanced Encryption Standard (AES), also known as Rijndael, is a block cipher adopted as an encryption standard by the U.S. government. It has been analyzed extensively and is now used worldwide, as was the case with its predecessor, the Data Encryption Standard (DES)...
因此,根据经验,我们不应使用DES或者其变体,因为它已被淘汰。
到目前为止,最好使用AES。还有其他选项,例如Twofish,Blowfish等。请注意,Twofish可被视为Blowfish的高级版本。
回答
过去,我在http://www.bouncycastle.org/上取得了不错的成绩(他们也有Cversion)。
回答
结合3种不同的答复,我认为是正确的答案。
从Bouncycastle下载加密库,然后我们需要从Oracle下载"无限强度管辖策略"(文件位于下载页面的底部)。确保已阅读有关如何安装自述文件的信息。
一旦完成此操作,并使用Bountycastle软件包随附的示例代码,我们就应该能够对数据进行加密。我们可以采用三重DES实现,它将为我们提供112位密钥(通常称为128位,但实际上只有112位是安全的),或者如前所述,我们可以使用AES。我的钱将用于AES。
回答
谢谢Michael,在JCE中尝试了许多东西之后,我终于选择了Bouncycastle。
JCE支持用于加密的AES和用于基于密码的加密的PBE,但它不支持两者的组合。我想要的东西和在Bouncycastle中找到的一样。
该示例位于:http://forums.sun.com/thread.jspa?messageID=4164916