如何在 Java 中验证公钥和私钥对

2024-03-07

有没有一种方法可以在 java 中验证给定的私钥(例如某个 *.key 文件)是否与某个使用 RSA 算法的某个 .pub 文件匹配的公钥?


您可以通过以下方式验证密钥对是否匹配

  • 创建一个挑战(足够长度的随机字节序列)
  • signing的挑战私钥
  • 验证签名使用公钥

如果签名验证正确,这将为您提供足够高的置信度(几乎确定)密钥对匹配,否则绝对确定密钥对不匹配。

示例代码:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);

KeyPair keyPair = keyGen.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();

// create a challenge
byte[] challenge = new byte[10000];
ThreadLocalRandom.current().nextBytes(challenge);

// sign using the private key
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initSign(privateKey);
sig.update(challenge);
byte[] signature = sig.sign();

// verify signature using the public key
sig.initVerify(publicKey);
sig.update(challenge);

boolean keyPairMatches = sig.verify(signature);

这也适用于椭圆曲线 (EC)密钥对,但您需要使用不同的签名算法(SHA256withECDSA):

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

如何在 Java 中验证公钥和私钥对 的相关文章

  • Java 中的 XPath 节点集

    我在 eclipse 中有这段代码 NodeSet nodes NodeSet xPath evaluate expression inputSource XPathConstants NODESET 它给我 NodeSet 上的编译时错误
  • 如何在 JFace 的 TableViewer 中创建复选框?

    我创建了一个包含两列的 tableViewer 我想将其中一列设为复选框 为此 我创建了一个 CheckBoxCellEditor 但我不知道为什么它不起作用 名为 tableName 的列显示其值正常 色谱柱规格如下 String COL
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • 在 C# 中创建加密随机数的最快、线程安全的方法?

    请注意 在多个线程上并行生成随机数时 加密随机数生成器不是线程安全的 使用的发电机是RNGCryptoServiceProvider它似乎重复了很长一段随机位 128 位 重现此情况的代码如下所示 缺乏使用锁来保护访问RNGCryptoSe
  • 在数据流模板中调用 waitUntilFinish() 后可以运行代码吗?

    我有一个批处理 Apache Beam 作业 它从 GCS 获取文件作为输入 我的目标是根据执行后管道的状态将文件移动到两个 GCS 存储桶之一 如果管道执行成功 则将文件移动到存储桶 A 否则 如果管道在执行过程中出现任何未处理的异常 则
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • com.jcraft.jsch.JSchException:身份验证失败

    当我从本地磁盘上传文件到远程服务器时 出现这样的异常 com jcraft jsch JSchException Auth fail at org apache tools ant taskdefs optional ssh Scp exe
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它

随机推荐

  • 右对齐 Facebook 点赞按钮 iFrame 的内容?

    我需要右对齐 Facebook Like 按钮的内容 以便它们始终位于其设置的 宽度 的骑行侧 我可以在 Firebug 中通过将表格设置为 float right 来做到这一点 但如果我在 CSS 中定义该值 它似乎不起作用 Here s
  • 在 C# 中使用 jpegtran、jpegoptim 或其他 jpeg 优化/压缩

    我在网上商店收集了 100 种 也许是 1000 种 产品 其中每种产品都有 10 30 张图片 我需要在不损失图像质量的情况下尽可能优化图像的文件大小 我没有直接使用 jpegtran jpegoptim 或任何其他 jpeg 优化器 但
  • numpy 中的双梯形积分

    我有一个二维函数 f x y exp y x 我想使用 NumPy trapz 计算二重积分 int 0 10 int 0 10 f x y dx dy 经过一番阅读后 他们说我应该重复 trapz 两次 但它不起作用 我尝试过以下方法 i
  • 如何在 Cocoa 中创建并显示自定义工作表? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这是新手问题 如何在 Cocoa 中创建并显示自定义工作表 就像 Safari 中的 添加书签 表 见下文 任务涉及哪些步骤 每一步如
  • 如何测试你的应用程序被杀死并重新启动?

    我想测试我的应用程序被杀死并在非主要活动中重新启动的情况 假装用户该应用程序只是恢复了 有人知道怎么做吗 我发现的所有想法都不起作用 因为它们都杀死了应用程序 然后该应用程序在主要活动中恢复 我实际上发现这更方便 您的应用程序在上一个活动中
  • 更改 Bazel 中的测试执行目录?

    我有一个简单的 Bazel 项目布局 如下所示 foo BUILD bazel testdata a txt test sh WORKSPACE 测试检查a txt exists foo test sh bin bash FILE foo
  • 如何向表中添加列?

    使用 react native sqlite storage 该应用程序已经在 Google Play 上上线 我想向现有数据库表添加两列 这样应用程序就不会因现有用户而崩溃 当您将列添加到现有表时 您会收到类似错误 error messa
  • 对 SBCL 中的“ql:quickload”和可执行脚本感到困惑

    我一直在尝试在我的可执行脚本中使用 Quicklisp 包 一个 简单的 工作示例是 usr bin sbcl script eval when compile toplevel load toplevel execute ql quick
  • 如何检查php脚本是否在本地服务器上运行?

    是否可以检查网站 php 是在本地运行还是在托管服务器上运行 如果网站在本地运行 我想启用一些日志 并且我不希望这些日志出现在在线网站上 我可以设置一个变量 local 1 但我必须在上传之前更改它 有没有办法自动执行此任务 本地服务器 W
  • 对于属性上的 NOTIFY 信号,如果我给它一个参数,会有什么区别?

    假设我有一个如下所示的类 class Something QObject Q PROPERTY int something READ getSomething NOTIFY somethingChanged signals void som
  • 更改 AngularJS ngTrim 行为

    我正在使用 AngularJS 版本 1 5 6 我有一个带有大量文本区域和文本输入的大型应用程序 我今天发现了一个错误 该错误是由 AngularJS 修剪文本类型输入的默认行为引起的 我想将此行为从默认修剪更改为默认不修剪 有没有一种简
  • 如何仅使用按位运算符实现 Bitcount?

    任务是仅使用按位运算符实现位计数逻辑 我让它工作得很好 但我想知道是否有人可以建议一种更优雅的方法 仅允许按位运算 没有 如果 因为 等 int x 4 printf d n x 0x1 printf d n x gt gt 1 0x1 p
  • 查找我的应用程序中的所有 mongoid 模型名称

    有没有办法找到我的 Rails 应用程序中的所有 Mongoid 模型名称 我可以通过获取 app models 文件夹中的所有文件来找到所有模型 但我特别想要 mongoid 模型名称 您可以在 Mongoid 3 1 及更高版本中执行此
  • AS3如何在有多个影片剪辑时使一次只能点击1个影片剪辑

    好的 我有一个页面 上面有 5 个影片剪辑 按钮 当您将鼠标悬停在每一个上时 它们会亮起 OVER 状态 当您单击它们时 它们会展开 DOWN 状态 问题是 如果您展开了多个影片剪辑 处于 向下 状态 它们会重叠并且看起来很糟糕 我想对它们
  • 如何在 Flask 中获得用户对 cookie 的许可

    我有一个用 Flask 和 Flask Login 构建的网站 所以我知道它在某个时候会生成 cookie 但我的问题比这更基本 Flask 应用程序是否总是立即生成 cookie 如果没有 是否有任何工具可以让我识别应用程序的哪一部分在何
  • 为什么我的堆栈指针仅以 16 的倍数递增?

    使用以下 C 代码 void func int a 1 b 2 c 3 编译使用gcc S O o myfile c我得到输出 file myfile c intel syntax noprefix text globl func type
  • 在Python中将外部函数分配给类变量

    我试图将其他地方定义的函数分配给类变量 以便稍后可以在实例的方法之一中调用它 如下所示 from module import my func class Bar object func my func def run self self f
  • CLR是虚拟机吗?

    我读过一本提到 net 的书CLR 作为虚拟机 任何人都可以证明这一点吗 为什么我们在某些开发平台上需要虚拟机的概念 是否有可能开发一个完全面向对象且像 net一样强大的本机框架 没有虚拟机的框架 将 CLR 称为虚拟机的书是 专业 Net
  • 如何在 Bash 中将文件名中的填充数字清零?

    使用 Bash 重命名以下形式的文件的最佳方法是什么 foo1 foo2 foo1300 fooN 使用零填充的文件名 foo00001 foo00002 foo01300 fooN 这不是纯粹的 bash 但是使用 Perl 版本更容易r
  • 如何在 Java 中验证公钥和私钥对

    有没有一种方法可以在 java 中验证给定的私钥 例如某个 key 文件 是否与某个使用 RSA 算法的某个 pub 文件匹配的公钥 您可以通过以下方式验证密钥对是否匹配 创建一个挑战 足够长度的随机字节序列 signing的挑战私钥 验证