BadPaddingException:给定的最终块未正确填充

2023-12-30

我有一个用 DES/ECB/PKCS5Padding 加密的私钥文件(由秘密短语生成的 56 位 DES 密钥),我想解密它。 我不知道为什么,但每次我尝试解密时,我的密码类的方法 doFinal 都会抛出此错误:

javax.crypto.BadPaddingException:给定的最终块不正确 填充于 com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) 在 com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA13*..) 在 javax.crypto.Cipher.doFinal(DashoA13*..) 在...

这是我的代码:

public static PrivateKey readPrivateKeyFromFile(File file, String chaveSecreta) {
    try {
        SecureRandom r = new SecureRandom(chaveSecreta.getBytes());
        KeyGenerator keyGen = KeyGenerator.getInstance("DES");
        keyGen.init(56, r);
        Key key = keyGen.generateKey();

        byte[] privateKeyBytes = decryptPKFile(file, key);

        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
        PrivateKey privateKey = null;
        try {
            privateKey = keyFactory.generatePrivate(privateKeySpec);
        } catch (InvalidKeySpecException e) {
            JOptionPane.showMessageDialog(null, "Erro 01, tente mais tarde");
        }
        return privateKey;
    } catch (NoSuchAlgorithmException e) {
        JOptionPane.showMessageDialog(null, "Erro 02, tente mais tarde");
    }
    return null;
}

public static byte[] decryptPKFile(File file, Key key){
    try{
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        byte[] cipherText = readBytes(file);
        cipher.init(Cipher.DECRYPT_MODE, key);
        System.out.println(cipher);
        System.out.println(cipherText);
        byte[] text = cipher.doFinal(cipherText);
        return text;
    }catch(Exception e){
        e.printStackTrace();
        return null;
    }
}

public static byte[] readBytes(File file) {
    try {
        FileInputStream fs = new FileInputStream(file);
        byte content[] = new byte[(int) file.length()];
        fs.read(content);
        return content;
    } catch (FileNotFoundException e) {
        System.out.println("Arquivo não encontrado!");
        e.printStackTrace();
    } catch (IOException ioe) {
        System.out.println("Erro ao ler arquivo!");
        ioe.printStackTrace();
    }
    return null;
}

有什么建议么?


您正在尝试使用使用特定种子创建的随机数生成器来解密密文。但是,您没有指定算法,并且算法也可能在内部发生变化。 Android 甚至会为某些版本生成完全随机的值。

你需要使用一个SecretKeyFactory http://docs.oracle.com/javase/7/docs/api/javax/crypto/SecretKeyFactory.html not a KeyGenerator。当然,您还需要 8 字节的密钥数据。在您的情况下检索此信息的唯一方法是找到SecureRandom之前的算法/实现并重新计算密钥。

现在任何密文都可以用任何密钥解密。 DES ECB 仅提供(某种)机密性,而不提供完整性。问题是它会解密成垃圾。现在,如果您尝试从垃圾中删除填充,您可能会收到填充错误。

如果您“幸运”——大约 256 次中只有一次——您就会得到结果。当解密的块以以下结尾时会发生这种情况01 or 0202,这是有效的填充。当然,结果也会是垃圾,但它不会以BadPaddingException。在你的情况下SecureRandom实例是likely一遍又一遍地返回相同的错误值,所以这可能永远不会发生。

将来,请使用 PBKDF2 并为其提供编码后的密码。清楚地注意所使用的字符编码,Java SE 使用 char 数组的最低 8 位。从来没有使用过String.getBytes()因为系统之间的默认编码可能有所不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BadPaddingException:给定的最终块未正确填充 的相关文章

  • 在 Windows 7 中,不从命令行强制终止 JVM

    我在 JVM 中运行了 Cobertura 仪器化 jar 当我在运行应用程序的 Windows 控制台中按 Ctrl C 时 JVM 结束并Cobertura 结果已成功刷新到 cobertura ser 文件 但我需要使用命令 工具 不
  • 如何解析比 Java 中 NumberFormat 更严格的数字?

    我正在验证表单中的用户输入 我解析输入NumberFormat http docs oracle com javase 7 docs api java text NumberFormat html 但它是邪恶的 几乎允许任何事情 有没有办法
  • 将json URL导入到java并使用jackson库解析它

    我正在尝试读取 java 中的 json 链接并解析它 以便我可以将它用于其他事务 但问题是我收到错误 我真的不知道该如何处理它们 这是代码 package weather data import weather data import c
  • 使 TreeMap 比较器容忍 null

    这个定制的 Valuecomarator 按其值对 TreeMap 进行排序 但在搜索 TreeMap 是否具有某个键时 它不能容忍 nullpointException 如何修改比较器来处理零点 import java io IOExce
  • Selenium Webdriver 中显式等待 findElements

    登录后 页面重定向到一个页面 我想等待页面加载 我在其中按 tagName 查找元素 By inputArea By tagName input List
  • Hibernate HQL 查询:如何将集合设置为查询的命名参数?

    给定以下 HQL 查询 FROM Foo WHERE Id id AND Bar IN barList I set id使用查询对象的setInteger 方法 我想设置 barList用一个List对象 但查看 Hibernate 文档和
  • 指定自定义应用程序上下文

    我们正在将一些数据服务从使用 jersey spring 的 Jersey 1 x 迁移到使用 jersey spring3 的 Jersey 2 x 我们有一些继承自 JerseyTest 的测试类 其中一些类使用 web xml 文件中
  • 找不到模块:javafx.controls

    我已经下载了JavaFX SDK 解压它并设置PATH TO FX系统变量 如下本说明 https openjfx io openjfx docs install javafx 我使用了以下代码示例 import javafx applic
  • Spring @Transactional 并发

    class MyService 公共无效a 同步 某个键 b Transactional 传播 传播 REQUIRES NEW 公共无效b 数据库工作吗 除非您使用代码编织 否则这是行不通的 Spring处理事务的默认方式是通过AOP代理
  • 用 Java 捕获扬声器输出

    使用Java可以捕获扬声器输出吗 此输出不是由我的程序生成的 而是由其他正在运行的应用程序生成的 这可以用 Java 完成还是我需要求助于 C C 我有一个基于 Java 的应用程序 使用过的爪哇声音 https stackoverflow
  • 如何更改tomcat jmx密码的文件权限

    我正在尝试保护 Windows 平台上托管的本地 tomcat 实例上的 JMX 访问 我已经创建了访问权限和密码文件 并使用以下 VM 参数插入这些文件 Dcom sun management jmxremote password fil
  • 摆动刷新周期

    我试图了解何时使用重新验证 重绘 打包 令人惊讶的是 我没有找到详细的底层文档 请随意链接 到目前为止我已经明白这都是 RepaintManager 的责任 油漆 重新油漆指的是脏 干净的东西 pack validate revalidat
  • 字母表中的加密和解密 - Python GCSE

    我目前正在尝试为学校编写一个程序 以便加密和解密输入的消息 我需要加密或解密的消息仅在字母表中 没有其他符号或密钥 例如 使用消息车加密输入的偏移量为 5 我希望它输出 afs 有人可以帮忙吗 这是我目前的代码 def find offse
  • 如何告诉 Java SAX 解析器忽略无效字符引用?

    当尝试使用字符引用解析不正确的 XML 时 例如 x1 Java 的 SAX 解析器因致命错误而惨死 例如 org xml sax SAXParseException Character reference x1 is an invalid
  • 获取运行时生成的类的字节

    我正在使用一个 Java 框架 该框架使用自定义类加载器在运行时生成一些 代理 类 我想为任何这样的类获取自定义 ClassLoader 从 loadClass 返回的与该类对应的原始字节数组 这可能吗 我知道 如果一个类作为资源存在 那么
  • 如何在其他窗口之上生成独立的 JFileChooser 对话框?

    Like 其他一些人 https stackoverflow com questions 4161207 javavm windows 7 64bit jfilechooser not showing dialog box谁问过类似的问题
  • bean 中的 Spring JavaConfig 属性未设置?

    我正在考虑将 Spring JavaConfig 与一些属性文件一起使用 但 bean 中的属性未设置 bean 中的属性未设置 这是我的网络配置 Configuration EnableWebMvc PropertySource valu
  • 使用 JPA 和 Hibernate 时 DISTINCT 如何工作

    DISTINCT 在 JPA 中使用什么列 是否可以更改它 以下是使用 DISTINCT 的 JPA 查询示例 select DISTINCT c from Customer c 这没有多大意义 不同的列是基于哪一列 它是否在实体上指定为注
  • 如何更改MultipartFile的originalFilename

    我在服务器端有一个 MultipartFile 文件 我想更改该文件的原始文件名 但该类仅支持 getOriginalFilename 谁能帮我这个 PS 上传的是图片文件 多谢 您可以使用 MockMultipartFile 类更改名称
  • 使用反射 API 填充 Proto 中的地图字段

    我正在尝试编写一个模块 该模块将获取 Message Builder 和从字段名称到值的映射 并将用值填充构建器 一切正常 直到我遇到地图字段 使用 Proto3 我收到一条特定消息 我知道我可以执行该消息的字段 builder b put

随机推荐

  • jQuery 中窗口和文档的区别

    我想知道两者之间有什么区别document window在 jQuery 中 这两个经常被使用 但我一直不明白它们之间的区别 唷 这实际上是一个比您想象的要大得多的问题 The 极短的答案是 The window对象代表容器document
  • MySQL 错误 1005:无法创建表(错误号:150)

    我正在尝试创建下表 create table messaInScena data date ora time spazio varchar 20 spettacolo varchar 40 postiDisponibili smallint
  • 我应该从 MooTools 转换为 jQuery 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 服务器无法验证请求。确保授权标头的值格式正确,包括签名

    我注意到我的计算机时区设置为 UTC 08 00 Pacific Time US Canada 所以我把它改为 UTC 08 00 Kuala Lumpur Singapore 然后当我打开 Azure 存储资源管理器时 它显示以下错误 我
  • 确定焦点事件:单击或制表符

    如果焦点是在单击事件或 tabstop 上触发的 如何确定 jQuery 上的焦点事件 我有这个焦点事件 如果焦点是由制表符触发的 我将执行某些操作 如果是单击 我将不会执行它 这是一个伪代码 a focus function if Thi
  • ORM 有何伟大之处?

    所以我的头靠在墙上 希望有人能来帮忙 要么把墙移走 要么阻止我的头移动 在过去的 3 4 周中 我一直在调查 ORM 是否为新项目做好了准备 ORM 必须映射到现有的大型且老化的 SQL 数据库 所以我尝试了亚音速 我真的很喜欢 v2 和
  • 如何使非模态对话框窗口始终位于最前面?

    我正在使用一个实例Dialog 在我的应用程序中显示一个小控制器窗口 用户可以与之交互以影响主窗口中的功能 有点像远程控制 我可以使这个对话框模式化 modality Qt WindowModal or modality Qt Applic
  • spring请求参数如何转换

    在基于 Spring 3 的 Web portlet 应用程序中 我有一个控制器 其方法如下 RenderMapping public ModelAndView handleRenderRequest RequestParam MyClas
  • Highcharts如何使用JavaScript变量作为系列数据源?

    我正在运行一个 asp net 代码隐藏 它创建一个字符串变量 该变量保存由逗号分隔的浮点数集合 C 中类似这样的东西 string myCString 4 5 3 1 6 5 7 0 1 3 然后 该变量进入 asp net 网页 并在其
  • 当上游服务器重新启动且未恢复正常时,NGINX 显示“错误网关”

    每次当我重新启动上游服务器时 我的 NGINX 显示 坏网关 这没关系 但后来 当上游服务器重新启动 nginx 时 nginx 不会自动恢复 我需要手动重新启动它 nginx 是否有一个选项可以让 nginx 每隔几秒检查一次上游是否恢复
  • Swift NSTimer 无法识别的选择器发送到实例timerFireMethod

    我正在为 iOS 9 2 编写一些计时器代码 我通过 xcode 下载了最新的 iOS 9 2 文档 他们展示 void timerFireMethod NSTimer timer 但这是行不通的 如果我使用这样的签名 func timer
  • 使用C#,如何读取动态创建的文本框的内容?

    Hy 我创建了一些具有标准内容的动态文本框 有谁知道当我按一个按钮时如何读取这些文本框的内容 假设用户修改了标准内容 多谢 Jeff Update 这就是我创建文本框的方式 foreach string name in listOfName
  • Magento getSingleton 混淆

    我对我接到的电话有点困惑Mage getSingleton 我希望有人能帮助我更好地理解 我见过一段核心代码是这样做的 Mage getSingleton customer session gt isLoggedIn 我不懂 PHP 但我想
  • Windows Phone 部署错误 DEP0001:意外错误:-2147009290

    正在开发 Windows Phone 10 应用程序 并在我的 ARM Lumia 950 设备上从 Visual Studio 运行它多次 然后我的 950 进行了操作系统更新 很快就强制重启了 更新至 10 0 14393 576 此后
  • 将新的 div 滑到另一个 div 下方

    我想要一个新的 隐藏的 div 从另一个 div 下面滑下来 我的想法是我有一个输入字段和一个添加按钮 单击添加按钮时 会显示更多表单元素 在下面滑出 这的形式部分对我的问题并不重要 所以我只是让第一个 div 为文本 将鼠标悬停在我身上以
  • 使用 Faraday 和 Rspec 进行存根

    我有一个看起来像这样的模型 class Gist def self create options post response Faraday post do request request url https api github com
  • CGO 库构建为 JS WASM 文件

    我想使用从 Golang 构建的 WebAssembly 库编写 JS 脚本 但我需要使用C库并通过CGO使用它 简而言之 我的代码如下所示 只是加载 C 库的示例 package main include
  • 如何在 PHP exec 中使用 Nmap

    我想从 PHP 调用 Nmap 如果我这样做 exec nmap output var dump output 它有效 我得到了经典的 Nmap 的用法 文本 但是当我尝试运行 UDP 检查时 exec nmap p 586 sU xx x
  • 使用正则表达式在 Notepad++ 中将单行 javascript 注释替换为多行样式注释

    我想使用 Notepad 搜索 javascript 文件或包含一些 javascript 的 html 文件 并用多行样式注释替换所有单行注释 例如 some comment goes here替换为 some comment goes
  • BadPaddingException:给定的最终块未正确填充

    我有一个用 DES ECB PKCS5Padding 加密的私钥文件 由秘密短语生成的 56 位 DES 密钥 我想解密它 我不知道为什么 但每次我尝试解密时 我的密码类的方法 doFinal 都会抛出此错误 javax crypto Ba