Rijndael 支持 Java
2022-09-03 04:19:16
我们需要在Java中进行一些Rijndael开发。
对文章,图书馆等有什么建议可以帮助我们吗?
任何指向密钥库维护以及如何安全地存储密钥的指针?
编辑:
它需要是开源的。从本质上讲,它只是使用Rijndael对数据进行标准加密/解密。
我们需要在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”,或者为了更好的安全性,存储在“智能卡”硬件令牌或其他加密硬件模块上。