我们有一个要求,做一些Rijndael算法开发Java编写的。

有关的文章,图书馆等,这将有助于我们的任何建议?

任何指针密钥库维护和如何安全地存储密钥?

编辑:

这将需要是开源的。本质上,它是一个使用Rijndael算法的数据只是标准的加密/解密。

有帮助吗?

解决方案

Java包含AES开箱。 Rijndael算法是AES。你不需要任何外部库。你只需要像这样:

byte[] sessionKey = null; //Where you get this from is beyond the scope of this post
byte[] iv = null ; //Ditto
byte[] plaintext = null; //Whatever you want to encrypt/decrypt
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//You can use ENCRYPT_MODE or DECRYPT_MODE
cipher.calling init(Cipher.ENCRYPT_MODE, new SecretKeySpec(sessionKey, "AES"), new IvParameterSpec(iv));
byte[] ciphertext = cipher.doFinal(plaintext);

和就是这样,用于加密/解密。如果您需要处理大量的数据,那么你最好不要读块是16个字节的倍数,并要求更新,而不是doFinal(你只需要调用doFinal的最后一个块上)。

其他提示

对于一个伟大的免费的图书馆,我强烈建议 BouncyCastle的。这是积极维护,高品质,并具有一个很好的阵列的代码示例。对于参考文档,你就必须更多地依靠普通的 JCE文档。

我不能说我们用什么库,以满足FIPS认证要求。但也有替代CryptoJ是非常非常便宜。

在一般情况下,我建议产生每个你喜欢的Rijndael对称密码加密消息的新的密钥进行加密,然后与非对称算法如RSA该键。这些私人密钥可以保存在像PKCS#12或Java的“JKS”,或者,更好的安全密码保护的,基于软件的密钥存储,在“智能卡”的硬件令牌或其他加密硬件模块。

由于我公司最近发现,AES是不太Rijndael算法。 AES具有键必须是128,192,或256位的限制 - 。然而,Rijndael算法允许采取160和224以及键

如埃里克森上面所指出的,BouncyCastle的规定,不支持的附加密钥长度一个Rijndael的对象:128/160/192/224/256位。具体而言,看看轻量级API。

GNU的加密是另一种开源库 - 然而,它也不会为160个224位密钥提供支持

所以,如果你是专门找全Rijndael算法的支持,那么BouncyCastle的是唯一一个至今我已经找到。

javax.crypto中具有AES支持: HTTP:// java的。 sun.com/developer/technicalArticles/Security/AES/AES_v1.html

作为用于安全密钥存储,通常的方法是推导从用户输入(口令)使用密码散列函数的加密密钥,并使用导出的密钥来加密钥匙串。或者,如果你只需要一个键,就可以使用派生密钥本身。

始终牢记的是,系统的安全性直接关系到所用的哈希函数的强度。与盐如果可能的话,和散列不止一次(数百次,例如)使用的密码安全散列函数,沿

这就是说,问题是很模糊。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top