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

Java解密引发异常

乐正乐湛
2023-03-14

下面是我的加密方法(值是一个输入参数):

 byte key_bytes[] = "12345678".getBytes();
 SecretKeySpec _keyspec = new SecretKeySpec(key_bytes, "DES");
 Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); // Yes, I know I shouldn't use DES
 cipher.init(Cipher.ENCRYPT_MODE, _keyspec);

 byte[] utf8 = value.getBytes("UTF8");
 byte[] enc = cipher.doFinal(utf8);   // Encrypt

 String encrypted = new String(new Base64().encode(enc));

 return URLEncoder.encode(encrypted, "UTF-8");

下面是我的解密方法(值是一个输入参数):

byte key_bytes[] = "12345678".getBytes();
SecretKeySpec _keyspec = new SecretKeySpec(key_bytes, "DES");
Cipher dcipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
dcipher.init(Cipher.DECRYPT_MODE, _keyspec);

byte[] dec = new Base64().decode(value);
byte[] utf8 = dcipher.doFinal(dec);  // Decrypt, throws exception
return new String(utf8, "UTF8");

我有个例外:

javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher

我读过不同的主题,所以我发现,当没有填充和有另一种密码模式时,就会发生这种异常。那么,怎么了?

共有1个答案

锺离德庸
2023-03-14

解密方法中缺少urldecoder。请注意,如果字符串以任何其他方式被破坏,并且长度不再是块大小的倍数,那么对于ECB和CBC操作模式,您都将收到此异常。

 类似资料:
  • 我正在尝试使用“AES/GCM/Nopadding”加密一个简单的测试“Sometext”。 我有一个main方法,首先传递一个字符串作为参数,该参数应该被加密。加密的文本将出现在控制台上。然后,调用解密(通过传递加密文本)来检查解密是否正常,即解密后是否返回相同的文本。我正在调用主类,但它在我的自定义方法中失败,出现异常: 我不确定为什么这个非法密钥大小给出错误。我的密钥“secretkey”在

  • 这个问题很棘手,但我需要任何帮助。 我在我的端使用system.security.cryptography.XML加密XML SAML Blob。 加密工作正常,但是当它击中另一端的java库时,它们会得到错误:

  • 我正在尝试用itextsharp打开一个用AES 256加密的PDF并显示它。PDF也是用itextsharp加密的。我使用的是iTextSharp 5.5.0.0。如果加密设置为“标准加密”,则此代码有效。 在内部“using”的关闭括号上引发异常:算术运算导致溢出。 更新(忘记加密代码): 我是不是漏掉了什么?

  • 我有一个包含属性的对象,该属性是包含两个字符串属性的对象列表。我的目标是将此映射的键与另一个包含字符串属性的对象进行比较。 为了更清楚我的请求包含地图: 我的sharePointDriveResponse包含以下列: 在这个阶段,我实现了一些工作正常的东西: 我的问题如下: 在这里传输数据时是否可能引发异常 在示例中:我发送一个创建文档的请求,并传递一个不允许文档使用但允许其他内容类型使用的字段。

  • 我已经创建了一个解码器来处理客户端发送的字节。给你 并在客户端发送字节时抛出下一个错误 Io.netty.handler.codec.DecoderException:java.lang.IllegalArgumentException:MinimumReadableBytes:-603652096(预期:>=0)在io.netty.handler.codec.ReplayingDecoder.C

  • 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception):     '''A u