我们需要在Java中进行一些Rijndael开发.
对文章,图书馆等有什么建议可以帮助我们吗?
任何指向密钥库维护的指针以及如何安全地存储密钥?
编辑:
它需要是开源的.从本质上讲,它只是使用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.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(sessionKey, "AES"), new IvParameterSpec(iv)); byte[] ciphertext = cipher.doFinal(plaintext);
就是这样,加密/解密.如果您正在处理大量数据,那么最好读取16字节倍数的块并调用update而不是doFinal(您只需在最后一个块上调用doFinal).
对于一个伟大的免费图书馆,我强烈推荐BouncyCastle.它是积极维护的,高质量的,并有一系列很好的代码示例.对于参考文档,您将不得不更多地依赖于一般的JCE文档.
我不能说我们使用什么库来满足FIPS认证要求.但CryptoJ还有其他更便宜的替代方案.
一般情况下,我建议为使用对称密码(如Rijndael)加密的每条消息生成一个新密钥,然后使用RSA等非对称算法加密该密钥.这些私钥可以存储在受密码保护的基于软件的密钥存储区中,如PKCS#12或Java的"JKS",或者为了更好的安全性,可以存储在"智能卡"硬件令牌或其他加密硬件模块上.