首先,不,每个编程环境都不是问题。例如,用 C 编写的 OpenSSL 支持大密钥。然而,根据 JCE 和 JNI 的经验,我建议您找到一种使用纯 Java 的方法,而不是通过 JNI 加载本机库。这要容易得多。
一个实用的解决方案:
您的应用程序是否在安装过程中使用某种安装程序应用程序安装?如果是这样,那么一种解决方案可能是使用此安装程序来安装 JCE。
不幸的是,BouncyCastle 也使用 JCE,如他们的FAQ中所述。
更新 1:
我找到了这个库,这可能是您正在寻找的。然而,它似乎不再被维护:http ://www.cryptix.org/
更新 2:
GNU 有一个实现 AES256 的库:http ://www.gnu.org/software/gnu-crypto/ 。更多关于可用密码的信息:http ://www.gnu.org/software/gnu-crypto/manual/Ciphers.html
使用 GNU-Crypto 的代码示例,假设您已经将密钥加载到key_bytes
:
IBlockCipher cipher = CipherFactory.getInstance("AES");
Map attributes = new HashMap();
attributes.put(IBlockCipher.CIPHER_BLOCK_SIZE, new Integer(16));
attributes.put(IBlockCipher.KEY_MATERIAL, key_bytes);
cipher.init(attributes);
int bs = cipher.currentBlockSize();
for (int i = 0; i + bs < pt.length; i += bs)
{
cipher.encryptBlock(pt, i, ct, i);
}
for (int i = 0; i + bs < cpt.length; i += bs)
{
cipher.decryptBlock(ct, i, cpt, i);
}
请确保您使用加密安全的随机数生成器(例如SecureRandom)为密钥创建 256 个字节:
byte[] seed = xxx; // Be sure to get a good new seed on every client machine.
SecureRandom random = new SecureRandom(seed);
byte[] key_bytes = new byte[256];
random.nextBytes(key_bytes);