首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Bouncycastle替换JCE

用Bouncycastle替换JCE
EN

Stack Overflow用户
提问于 2014-08-08 17:16:43
回答 2查看 2.4K关注 0票数 1

我必须摆脱JCE罐子,应该用弹跳城堡罐子来代替AES加密和解密。

当我将JCE策略jars替换为用于AES 256算法的BC jars时,会出现无效的密钥大小异常。但它的工作原理很好,键大小为128。

在AES 256算法的情况下,如何利用BC jars。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-11 17:37:02

这个答案假设不可能使用上面提到的脚本安装 无限强度的司法加密文件

Cipher的关键大小限制在Cipher类本身中。绕开它是不可能的。

相反,您可以使用Bouncy城堡轻量级API。轻量级API是轻量级的,因为API实现本身需要大量的类,但对您来说并非如此。

例如,使用PKCS#7 (PKCS#5兼容)填充的AES CBC:

代码语言:javascript
复制
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));
    }
}
票数 4
EN

Stack Overflow用户

发布于 2017-02-21 08:10:20

要使用AES 256加密,您必须使用“Java密码扩展(JCE)无限强度管辖权策略文件”。有两个罐子,local_policy.jar和US_export_policy.jar。

你可以从甲骨文网站获得这些文件。

一旦你有了这些罐子,就用这些来替换"your_java_installation_directory/jre/lib/security“罐子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25208799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档