使用 Jsch 生成 4096 位 RSA 密钥比 2048 位慢得多

2024-01-02

我需要为客户端/服务器应用程序创建公钥和私钥 RSA 密钥,并且我正在使用JSch图书馆 http://www.jcraft.com/jsch/这样做。到目前为止,我一直在生成 4096 位密钥,因为我希望获得尽可能最好的安全性。然而,这需要 3~5 分钟,而生成 2048 位密钥则需要大约 10 秒。有一个 sscce:

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.KeyPair;

public class KeyGenerator {

    public static void main(String[] args) {
        JSch jsch = new JSch();

        System.out.println("Starting...");

        try {
            KeyPair keyPair = KeyPair.genKeyPair(jsch, KeyPair.RSA, 4096);
        }
        catch (JSchException e) {
            e.printStackTrace();
        }

        System.out.println("Done.");
    }
}

生成时间的巨大差异是可以预料到的吗?我不太清楚 RSA 密钥是如何生成的(因此使用库),但我认为所需的时间可能是指数级的?看起来……太指数化了。

这是JSch API http://epaul.github.io/jsch-documentation/javadoc/(因为图书馆本身及其来源的网站几乎没有文档)。

Update:我做了一些分析。下面是密钥生成时间的图表,从 512 位开始一直到 4096 位,每个密钥大小有 30 个样本。

这是一个类似的图表,排除了 4096 位试验(相同的数据集):

它们看起来非常相似,这表明时间的指数增长相当平滑。我想我只是不耐烦了!


生成 RSA 密钥需要找到两个满足特定条件的大的随机素数。找到这样的素数本质上就是选择随机数,然后通过执行某些测试来检查它们是否是素数。这素数定理 http://en.wikipedia.org/wiki/Prime_number_theorem告诉我们,随着素数变得越来越大,它们也变得越来越稀有,所以你必须生成更多的随机数才能找到素数。对于较大的数字,确定该数字是否为素数的检查也需要更长的时间。

所有上述因素都会导致生成更大密钥所需的时间增加,但除此之外,听起来这个库并不是特别快。在相当现代的 PC 上使用 OpenSSL,我可以在大约 1 秒内生成 2048 位密钥,并在 10 秒内生成 4096 位密钥,因此您的 10 秒和 3-5 分钟的时间似乎过多。如果性能是一个问题,我建议尝试不同的库,并理解any库生成大密钥会比生成小密钥慢!

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

使用 Jsch 生成 4096 位 RSA 密钥比 2048 位慢得多 的相关文章

  • 使用 s:select 标签在下拉菜单中使用 i18n [重复]

    这个问题在这里已经有答案了 我的 JSP 页面中有一个下拉菜单 它是通过
  • Maven项目中的HDF5

    我正在尝试将 hdf hdf5lib H5 导入到 NetBeans 中的 Maven 项目中 它有这个作为导入行 import hdf hdf5lib H5 正如这里所建议的 https support hdfgroup org prod
  • 将更改(永久)保存在数组列表中?

    那可能吗 例如 用户将新的项目 元素添加到数组列表 缓冲读取器进程 中 并且肯定会发生更改 我的问题是 即使用户多次更改数组列表 它也可能会永久存在 即使他们关闭程序并再次打开它 它也会一直存在 注意 不使用 txt 很抱歉问这样的问题 但
  • 图像在 3D 空间中绕 Y 轴旋转

    我有一个 BufferedImage 我想用 theta 角而不是仿射变换绕 Java 中的 Y 轴旋转图像 图片 旋转将如下图所示 矩形将是图像 我可以通过旋转图像的每个像素并绘制图像来做到这一点 因为我必须旋转很多图像 所以我认为这不是
  • 是否有任何理由使用 ZoneId.of("UTC") 而不是 ZoneOffset.UTC ?

    有什么理由使用ZoneId of UTC 代替ZoneOffset UTC 我们知道两者之间的区别 如ZoneOffset UTC 和 ZoneId of UTC 之间有什么区别 https stackoverflow com questi
  • 简单的Java程序插入USB热点后速度慢100倍

    我有以下Java程序 class Main public static void main String args throws java io IOException long start System nanoTime java io
  • 如何注册 org.springframework.integration.monitor.IntegrationMBeanExporter

    根据http www ibm com support knowledgecenter en SS7K4U 8 5 5 com ibm websphere nd multiplatform doc ae cspr data access tr
  • 竞争条件和 Clojure Atoms

    clojure atom 的文档指出 Changes to atoms are always free of race conditions 然而 竞争条件不仅是根据更改定义的 而且是在不同线程中并行逻辑操作的上下文中定义的 我想知道 保证
  • 如何使用Gson将JSONArray转换为List?

    在我的 Android 项目中 我试图将收到的 JSONArray 转换为列表 在 的帮助下这个答案 https stackoverflow com questions 8371274 how to parse json array in
  • java springrabbit - 优雅地拒绝消息

    我有以下侦听器方法 Override public void onMessage Message message Channel channel try do something bad catch Exception e try long
  • java多线程中“私有最终对象”锁定有什么用?

    java多线程中 私有最终对象 锁定有什么用 据我的理解 我认为要使一个类成为线程安全的 我们应该使用内部锁定 将所有方法标记为同步并使用 this 将它们锁定在对象的监视器上 或者我们可以用方法中的私有最终对象锁替换类的 this 上标记
  • 错误包括 bouncycastle 提供商

    我需要使用bouncycastle provider我的项目中的库 我已将其包含在 gradle 项目中 apply plugin application sourceCompatibility 1 6 version 1 0 0 main
  • org.apache.poi 中的异常

    我试图编写一个可以读取和写入的程序 xlsx文件中 下面提供的代码旨在能够编写其第一个 Excel 程序 package excel reader import java io FileOutputStream import java io
  • 更改JavaFX TableView字体大小[重复]

    这个问题在这里已经有答案了 您好 我想在表视图列内的文本上设置字体 我如何用 Java 做到这一点 这是我的代码 感谢帮助 private final TableView
  • Java 日期和 MySQL 时间戳时区

    我正在编辑一段代码 其基本功能是 timestamp new Date 然后坚持下去timestamp中的变量TIMESTAMPMySQL 表列 然而 通过调试我看到Date显示在正确时区的对象 GMT 1 当持久化在数据库上时 它是GMT
  • jasper 报告文件中出现错误

    首先 我在 iReport 5 1 0 中创建一个 R D1 jrxml 文件 我执行该报告的 Java 代码如下所示 import java sql Connection import java sql DriverManager imp
  • Java泛型类型参数中的问号是什么意思? [复制]

    这个问题在这里已经有答案了 这是取自斯坦福解析器附带的一些示例的一小段代码 我已经用 Java 进行了大约 4 年的开发 但从未对这种风格的代码应该表示什么有非常深入的理解 List
  • 如何使用 iBatis (myBatis) 的注释进行 IN 查询?

    我们只想在 MyBatis 中使用注释 我们确实在努力避免使用 xml 我们尝试使用 IN 子句 Select SELECT FROM blog WHERE id IN ids List
  • Spring Boot 2 中的 401 代替 403

    With 春季启动 https projects spring io spring boot 1 5 6 发布我能够发送 HTTP 状态代码401代替403如中所述如果请求未经身份验证的uri 如何让Spring Security响应未经授
  • 每组最大 n 个 SQL 查询的高性能方法

    我正在尝试构建一个基础设施 以便根据需要快速运行回归 从包含我们网络服务器上所有历史活动的数据库中提取 apache 请求 为了通过确保我们仍然回归来自较小客户的请求来提高覆盖范围 我想通过为每个客户检索最多 n 个 为了这个问题 假设 1

随机推荐

  • VueJS:无法读取未定义的属性“dispatch”

    我使用 VueJS 和 Vuex 开始我的简单项目 我有一个问题女巫从商店调用方法 当我单击控制台中的按钮时 我看到此错误 Uncaught TypeError Cannot read property dispatch of undefi
  • OpenVG 实现? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何为多处理器机器编译 C#? (使用 VS 2010 或 csc.exe)

    问候 我在以下位置搜索了编译器 csc exe 选项MSDN http msdn microsoft com en us library 6s2x2bzy aspx我在 Stackoverflow 找到了一个答案 关于编译with多处理器
  • 在 Xcode 6 上模拟出现问题

    我安装了 Xcode 6 gm 版本 我创建了新项目 并在带有 ios 8 的 iPhone 6 或 iPhone 5s 模拟器上运行它 一切都很好 但是当我在 iphone 5s 部署目标 ios 7 1 上进行模拟时 设备屏幕不是全屏
  • Fine Uploader - 选择/上传图像后获取宽度和高度尺寸

    使用fine uploader 我需要能够获取所选文件的原始宽度和高度尺寸 以像素为单位 以便我可以在以后在我的页面上使用它们 有没有办法在选择文件后或在完成成功回调时执行此操作 Fine Uploader 不提供此类数据 但您可以轻松确定
  • 缺少 PercentRelativeLayout 百分比值的 XML 资源类型?

    似乎新的百分比支持库已发布 但不允许在维度 xml 文件中引用百分比值 也就是说 而不是
  • 在 Xcode 5 中编辑故事板非常慢

    我有 Xcode 5 故事板编辑速度非常慢 每次启动 Xcode 时我都会收到以下消息 文件 MainStoryboard storyboard 有 26 个内部不一致之处 已被发现并修复 and 多个资源具有相同的名称 yellowbut
  • psycopg2 安装错误 - 库未加载:libssl.dylib

    我尝试安装psycopg2在 virtualenv 中使用pip 编译看起来没问题 它说 成功安装了 psycopg2 但是当我尝试将其导入到 python 解释器 在 virtualenv 中 时 它指示错误 File
  • FFI 返回一个巨大的整数值而不是 0

    我已将 NumericalIntegration C 库封装在 Haskell 中 Here https github com stla numerical integration是该软件包的最新版本 Hackage 上的版本较旧 这是 C
  • 自动从 png sprite 表中查找帧尺寸 [重复]

    这个问题在这里已经有答案了 可能的重复 PySide 分离精灵表 将图像分离成连续的颜色区域 https stackoverflow com questions 14432021 pyside separating a spriteshee
  • 日志中的文件无法访问错误 (setuptools)

    当我运行我的应用程序时 我的应用程序引擎日志给出以下错误 WARNING 2012 03 01 23 27 31 089 py zipimport py 139 Can t open zipfile Library Frameworks P
  • 使用EA生成类图[逆向工程]

    我正在尝试使用 EA 的逆向工程选项生成类图 我能够使用选项 导入源目录 成功导入我的代码 如何从导入的文件生成类图 导入后 类图被添加到每个包中 我用 Java 进行了测试 它只包含包的类 因此 如果您想创建更复杂的类图 则必须创建一个新
  • 如何在 Twitter 引导程序中仅显示一次模式?

    这是我现在的代码 在页面加载时 模型会显示 但当我刷新时 它会一直显示它应该只显示一次 cookie 来自https github com carhartl jquery cookie https github co
  • 我不明白我的 NullPointerException 有什么问题或者为什么它存在

    这些是什么 每当我尝试将对象传递给数据库助手时 我的应用程序就会不断崩溃 变量名称是 e 我已将对象中的数据显示在 Toast 通知中 一切都很好 但是当我尝试将其传递给数据库助手时 我什么也得不到 我什至将日志添加到每隔一行 但由于该方法
  • Jinja2 用于单词模板

    我想使用 jinja2 进行单词模板 就像提到的那样this http reinout vanrees org weblog 2012 07 04 document automation html短文 我面临的问题如下 如果我把 title
  • 在 R 控制台中指定字体 - 多平台解决方案?

    这对于 R 问题来说相当平常 但我想在我的 R 控制台中指定字体 在 Windows 中这很容易做到 约翰 库克 John Cook 写了一篇很棒的小文章 http www johndcook com blog 2008 10 31 cha
  • html表格根据值设置一些单元格文本颜色

    我有一个 html 表 在特定列中 文本设置为 Y 或 N 我想知道如果值为 N 是否可以在加载时以编程方式将文本的颜色设置为红色 table tr td N td td Y td tr table Using jQuery http jq
  • torch 相当于 numpy.r_

    numpy 有 r https numpy org doc stable reference generated numpy r html which 将切片对象转换为沿第一个轴的串联 这是快速构建数组的简单方法 有两种用途 案例 如果索引
  • 递归日志记录导致 Python 3 中的解释器崩溃

    以下代码记录错误并调用自身 导致堆栈溢出并最终导致 Python 3 6 中的核心转储 gt gt gt import logging gt gt gt def rec logging error foo rec gt gt gt rec
  • 使用 Jsch 生成 4096 位 RSA 密钥比 2048 位慢得多

    我需要为客户端 服务器应用程序创建公钥和私钥 RSA 密钥 并且我正在使用JSch图书馆 http www jcraft com jsch 这样做 到目前为止 我一直在生成 4096 位密钥 因为我希望获得尽可能最好的安全性 然而 这需要