使用 Crypto Node.js 出现错误“数据对于密钥大小来说太大”

2024-04-12

我收到错误"Error: error:0406C06E:rsa routines:RSA_padding_add_PKCS1_type_1:data too large for key size"当我做:

var crypto = require('crypto');
var fs = require('fs');

var first_keys = {
    public_key: fs.readFileSync('tests/public.key'),
    private_key: fs.readFileSync('tests/private.key')
}

var first_result = crypto.privateEncrypt({
    key: first_keys.private_key
}, new Buffer("Hello World!"));

var second_result = crypto.privateEncrypt({
    key: first_keys.private_key
}, first_result);

var second_plaintext = crypto.publicDecrypt({
    key: first_keys.public_key
}, second_result);

var first_plaintext = crypto.publicDecrypt({
    key: first_keys.public_key
}, second_plaintext);

if(first_plaintext == new Buffer("Hello World!"))
    console.log("Hello World!");

我知道这很奇怪,但我正在创建一个过程,需要它进行 n 次迭代(n 个密钥的私有加密和 n 个密钥的公共解密)。我使用单个密钥进行测试。


RSA 的工作原理是进行模幂运算。这意味着任何加密的内容通常都具有与模数(两个素数的乘积)一样多的位。

RSA 需要一个填充方案来确保安全。默认为RSA_PKCS1_OAEP_PADDING在 Node.js 中。这种填充方案在加密前向明文添加了 42 个字节,但现在新的明文(first_result) 大于模数,因此无法以可恢复的方式对其进行加密。

您有两个选择:

  • Use 混合加密 https://en.wikipedia.org/wiki/Hybrid_cryptosystem or
  • 为以后的迭代禁用填充。

让我们尝试禁用填充:

var first_result = crypto.privateEncrypt({
    key: first_keys.private_key
}, new Buffer("Hello World!"));

var second_result = crypto.privateEncrypt({
    key: first_keys.private_key,
    padding: constants.RSA_NO_PADDING
}, first_result);

var second_plaintext = crypto.publicDecrypt({
    key: first_keys.public_key,
    padding: constants.RSA_NO_PADDING
}, second_result);

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

使用 Crypto Node.js 出现错误“数据对于密钥大小来说太大” 的相关文章

  • Angular2:如何在实现 routerCanDeactivate 时防止/取消历史操作?

    routerCanDeactivate 成功阻止导航离开组件 routerCanDeactivate nextInstruction ComponentInstruction prevInstruction ComponentInstruc
  • 将 h1 元素的内容复制到剪贴板?

    所以 我做了一个翻译器 但效果不是很好 但无论如何 它正在工作 我想尝试添加一些可以复制结果的内容 有没有办法做到这一点 以下是我的代码 提前致谢 我知道有一种方法可以通过输入来完成此操作 但我不确定是否可以通过标题来完成 var myTe
  • 淘汰赛“闪烁”问题

    我正在使用 KO 构建 SPA 单页应用程序 该应用程序看起来像一本书 用户可以翻页 问题是 每次加载页面时 都会有一小段时间页面 闪烁 用户会看到页面的无样式版本 我猜这是因为很多样式都依赖于 ko 绑定 所以在 ko 完成它 神奇 之前
  • 调用 DynamoDB 中的用户数据时渲染得太晚

    所以我试图从dynamoDB 我正在使用一个GraphQL API访问我的数据库 在提供的代码的注释部分中 我提到我已经尝试过users 1 friends map 它确实返回正确的朋友列表数组 但用户似乎直到朋友列表渲染后才被设置 我应该
  • 如何滚动到 div 元素底部 Selenium Webdriver

    我有一个用例 其中网页上有一个 div 元素 只要您单击链接 它就会出现一个弹出对话框 它不是实际的弹出窗口 它类似于当您单击链接进行检查时在 Facebook 中打开的对话框 对您的帖子的反应等 我使用 Selenium WebDrive
  • 从jquery获取httpreferrer的正确方法

    命令 document referrer 是使用 Jquery 获取引荐来源网址的正确方法吗 怎么样 document referrer
  • 为什么显示后无法清除错误消息-axios-react

    第一个问题的背景 https stackoverflow com questions 72929201 react axios showing message to user 72929320 我正在展示使用localhost 3000 u
  • Javascript:确认、确定、取消按钮上的自定义文本

    我有一个验证 我想显示 继续 和 返回 而不是 确定 和 取消 但我无法找到准确的解决方案 任何人都可以帮助我
  • 带有占位符文本的文本框,该文本会逐字符消失

    我正在寻找一种方法来构造带有日期字段占位符文本的文本框 占位符文本将为 xx xx xxxx 并在用户键入时逐个字符消失 留下斜杠 我遇到了以下两个问题 它们似乎解决了使文本立即消失的问题 HTML CSS 制作一个文本框 其中的文本显示为
  • jQuery - 解析 JSON 数据 - 变量名称遇到问题

    我第一次深入研究 JSON 数据的使用 不过我有一些使用 jQuery 的经验 我发布到此 URL tumblr api jyoseph com api read json 我想做的是输出返回的 json 到目前为止我所拥有的 docume
  • 有没有办法将 Bootstrap 3.0 插件与 jQuery.noConflict() 一起使用?

    目前 我们的页面上加载了 2 个不同版本的 jQuery 1 4 2 和 1 10 1 和 window jQuery 对象当前指向 1 4 2 我们使用版本 1 10 1 的 noConflict 将其设置为 jq1 var jq1 jQ
  • 向 ChartJS 数据点添加逗号

    我需要在 ChartJS 图表中的数字中添加逗号 前任 数据点可能是 1032 05 4334 75 8482 46 我需要它显示为 1 032 05 4 334 75 8 482 46 以下是包含当前代码的开发网站的链接 投资计算器 ww
  • Angular ui-router:链接不可点击

    我尝试运行 angular ui router 来处理我的视图 但我遇到了问题 以下视图的两个链接不可点击 带有链接标签的角度更改变量 但我无法单击 我有这样的观点 h1 App h1
  • 使用 Node.js 将对象写入文件

    我已经在 stackoverflow google 上搜索过这个 但似乎无法弄清楚 我正在抓取给定 URL 页面的社交媒体链接 该函数返回一个包含 URL 列表的对象 当我尝试将此数据写入不同的文件时 它会输出到该文件 object Obj
  • jQuery醉酒:手动触发器和delayIn

    我正在使用 jQuery 的 Tipsy 插件 每当我尝试使用手动触发器和delayIn调用醉酒时 delayIn似乎不起作用 interest tipsy trigger manual gravity n html true delayI
  • 给出 HTML 和 Xpath 时突出显示

    给定 HTML 作为字符串 Xpath 和偏移量 我需要强调这个词 在下面的例子中我需要强调Child 1 HTML 文本 h2 Children h2 Joe has three kids br ul li a href Child 1
  • 更改 Chrome、Firefox 或 IE 上的 navigator.platform 以测试操作系统检测代码

    如何在 Chrome Firefox 或 Internet Explorer 最好是 Chrome 上欺骗 navigator platform 的值 看起来过去在 Firefox 上是可以实现的 但现在已经不再支持了 这是为了测试网站上的
  • 从状态提供者的解析方法更改角度应用程序的状态

    我在我的角度应用程序中使用 ui router 目前我有两条路线 signin 和 user 最初 当用户单击登录按钮时 它显示 signin 我发送 ajax 请求并获取用户 ID 我将用户 ID 存储在 localstorage 中并将
  • 无法访问jsf组件中的javascript文件

    我有一个必须访问 javascript 文件的 jsf 组件 我添加了这个输出脚本 如下面的代码所示 我在生成的 html 中收到错误 并且无法访问 javascript javascript 文件位于 document root js 目
  • 从 MongoDB+Node.js 获取数据到客户端 JavaScript

    如何使用 Node js 连接 MongoDB 然后将结果传递给客户端 JavaScript 并以 HTML 形式显示 var http require http var URL require url var Db require mon

随机推荐