首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArithmeticException:使用来自BouncyCastleProvider的AES/CFB1 1/CFB1 5加密算法

ArithmeticException:使用来自BouncyCastleProvider的AES/CFB1 1/CFB1 5加密算法
EN

Stack Overflow用户
提问于 2015-03-13 17:41:54
回答 1查看 359关注 0票数 2

我正在尝试使用“AES/CFB1 1/PKCS5Padd”(BouncyCastle provider)创建一个密码算法,但是出现了一个ArithmeticException:

org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher.getOutputSize(Unknown源)在org.bouncycastle.jce.provider.JCEBlockCipher$BufferedGenericBlockCipher.getOutputSize(Unknown源)在org.bouncycastle.jce.provider.JCEBlockCipher.engineGetOutputSize(Unknown源)在org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(Unknown源)在javax.crypto.Cipher.doFinal(Cipher.java:2087)

我只是尝试使用默认的Java密码扩展(JCE),但是它不适用于1位的CFB密码模式。我需要使用"AES“算法与密码模式"CFB 1位”。它很好地工作在密码模式“循环流化床8位”和“循环流化床128位”。

代码语言:javascript
复制
private static String buildCipherEncryptCheck(String data){

    byte[] dataBytes = data.getBytes();
    String encryptedData = null;

    try {                               
        // Generate valid key
        KeyGenerator keygenerator = KeyGenerator.getInstance("AES");                

        keygenerator.init(128);
        SecretKey myKey = keygenerator.generateKey();           

        // Generate cipher encrypt
        Cipher cipher = Cipher.getInstance("AES/CFB1/PKCS5Padding", new BouncyCastleProvider());

        // Initialize the cipher for encryption
        cipher.init(Cipher.ENCRYPT_MODE, myKey);                

        // Encrypt the text
        byte[] textEncrypted = cipher.doFinal(dataBytes);
        encryptedData = new String(Base64.encode(textEncrypted));

    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    } catch (NoSuchPaddingException e) {
        e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
        e.printStackTrace();
    } catch (BadPaddingException e) {
        e.printStackTrace();
    }

    return encryptedData;
}   
EN

回答 1

Stack Overflow用户

发布于 2015-03-13 18:39:56

我不清楚您如何将PKCS #5填充应用于流密码。为1位CFB设计一个面向位的填充以消除最后一个字节可能是有意义的,但是PKCS5Padding (PKCS #7,真的)用字节来填充最后的块。但是流密码没有块大小。你不想要NoPadding吗?

我怀疑CFB模式引擎返回0作为块大小,因为它是未定义的。当填充引擎试图在计算中使用这个块大小时,会引发算术错误。(如果正在发生这种情况,BouncyCastle最好验证块大小并在这里抛出一个更具体的错误。)

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

https://stackoverflow.com/questions/29038655

复制
相关文章

相似问题

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