我必须摆脱JCE罐子,应该用弹跳城堡罐子来代替AES加密和解密。
当我将JCE策略jars替换为用于AES 256算法的BC jars时,会出现无效的密钥大小异常。但它的工作原理很好,键大小为128。
在AES 256算法的情况下,如何利用BC jars。
谢谢。
发布于 2014-08-11 17:37:02
这个答案假设不可能使用上面提到的脚本安装 无限强度的司法加密文件 。
Cipher的关键大小限制在Cipher类本身中。绕开它是不可能的。
相反,您可以使用Bouncy城堡轻量级API。轻量级API是轻量级的,因为API实现本身需要大量的类,但对您来说并非如此。
例如,使用PKCS#7 (PKCS#5兼容)填充的AES CBC:
public class BouncyLightWeightCipherExample {
private static final boolean FOR_DECRYPTION = false;
public static void main(String[] args) throws NoSuchAlgorithmException, Exception {
final byte[] keyData = new byte[256 / Byte.SIZE];
final byte[] ivData = new byte[16];
final byte[] testData = "owlstead".getBytes(UTF_8);
// JCE creation
final Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
// initialization
c.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyData, "AES"), new IvParameterSpec(ivData));
// and encryption
final byte[] ciphertext = c.doFinal(testData);
// Bouncy Castle creation
final BlockCipher blockCipher = new AESFastEngine();
final CBCBlockCipher withModeOfOperation = new CBCBlockCipher(blockCipher);
final PaddedBufferedBlockCipher withPadding = new PaddedBufferedBlockCipher(withModeOfOperation);
// initialization
final ParametersWithIV keyAndIV = new ParametersWithIV(new KeyParameter(keyData), ivData);
withPadding.init(FOR_DECRYPTION, keyAndIV);
// and decryption
int plaintextSize = withPadding.processBytes(ciphertext, 0, ciphertext.length, ciphertext, 0);
plaintextSize += withPadding.doFinal(ciphertext, plaintextSize);
final byte[] plaintext = Arrays.copyOf(ciphertext, plaintextSize);
// there we are
System.out.println(new String(plaintext, UTF_8));
}
}发布于 2017-02-21 08:10:20
要使用AES 256加密,您必须使用“Java密码扩展(JCE)无限强度管辖权策略文件”。有两个罐子,local_policy.jar和US_export_policy.jar。
你可以从甲骨文网站获得这些文件。
一旦你有了这些罐子,就用这些来替换"your_java_installation_directory/jre/lib/security“罐子。
https://stackoverflow.com/questions/25208799
复制相似问题