当前位置: 首页 > 知识库问答 >
问题:

ArithmeticException:使用来自BouncyCastleProvider的密码算法“AES/CFB1/PKCS5Padding”

仇浩旷
2023-03-14

我正在尝试使用“aes/cfb1/pkcs5padding”(BouncyCastle提供程序)创建一个密码算法,但出现了一个AlithmeticException:

java.lang.ArithmeticException:/by zero位于org.bouncycastle.crypto.paddings.paddedBufferedBlockCipher.getOutputSize(未知源)位于org.bouncycastle.jce.provider.jceBlockCipher$BufferedGenericBlockCipher.getOutputSize(未知源)位于org.bouncycastle.jce.provider.jceBlockCipher.EngineGetOutputSize(未知源)位于

我只是尝试使用默认的Java加密扩展(JCE),但它不能与带有1位的CFB密码模式一起工作。我需要使用密码模式为“CFB 1位”的“AES”算法。它与密码模式“CFB 8位”和“CFB 128位”很好地工作。

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;
}   

共有1个答案

晏炳
2023-03-14

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

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

 类似资料:
  • 我正在为我的应用程序制作加密/解密模块。我按照这个教程 它没有给出任何错误,也没有显示输出。 日志文件 MainActivity.Java AESHelper.Java } AESHelper.java:52 还有AESHelper.java:25

  • 问题内容: 我目前正在使用Java创建应用程序,我用Java搜索了密码加密,但是结果是如此巨大,以至于我感到不知所措。如何使用Java加密和解密密码?加密和解密密码的最佳实践是什么?我猜MD5不是一种方法,因为它是一种单向哈希。我使用struts2作为框架,想知道它们是否提供密码加密 问题答案: 更新时间 : 试试JBCrypt: 从此处下载jBCrypt-0.3,有关更多详细信息,请查看READ

  • 我正在尝试实现AES自定义密码加密,并希望了解下面的代码。 我不太理解为什么需要指定密钥大小256“pbekeyspec(password,salt,65536,256)”,而我已经使用了“pbkdf2withHMACSHA256”,它应该生成256位的SecretKey。 并且在使用我的密码+salt生成密钥之后,为什么我需要将它与SecretKeySpec作为AES算法关联起来。

  • 我得到了一个错误: 不支持的密码算法(AES-256-GCM)(运行时错误) 但我似乎有所有的要求: $openssl enc-help 2>&1 grep gcm -AES-128-ECB-AES-128-GCM-AES-128-OFB -AES-192-ECB-AES-192-GCM-AES-192-OFB -AES-256-ECB-AES-256-GCM-AES-256-OFB Ruby解释

  • 问题内容: 这是我在Node.js中拥有的: 返回: 这就是我在Go中所拥有的: 最终返回 许多Go代码都来自https://gist.github.com/manishtpatel/8222606 我也尝试过此方法:如何在golang中解密在nodejs中加密的AES256位密码?(在这种情况下,无需进行一些修改),但会抛出错误 这是我尝试的代码: 我搜索了很多东西,但似乎无法弄清楚。 我究竟做

  • 问题内容: 如何使用Java充气城堡库实现AES加密?示例代码或示例代码的链接会很不错:) 问题答案: 如果下载bcprov源,您将看到该类。它显示了如何设置bouncyCastle提供程序,如何创建加密和解密对象,如何设置s以及如何在这些流上调用write方法。 编辑 :似乎链接已损坏。看看这里的AESTest