使用 node.js 解密 mcrypt 编码文本

2024-04-25

我使用 PHP 的 mcrypt 用 Blowfish 编码了文本:

$td = mcrypt_module_open ('blowfish', '', 'cfb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
mcrypt_generic_init ($td, "somekey", $iv);
$crypttext = mcrypt_generic ($td, "sometext");
mcrypt_generic_deinit ($td);
$res = base64_encode($iv.$crypttext);

当尝试使用 Node 的加密库解码数据时,我得到垃圾输出。

var crypto = require("crypto"),
    ivAndCiphertext = "base64-encoded-ciphertext", 
    iv, cipherText, ivSize = 8, res= "";

ivAndCiphertext = new Buffer(ivAndCiphertext, 'base64');
iv = new Buffer(ivSize);
cipherText = new Buffer(ivAndCiphertext.length - ivSize);
ivAndCiphertext.copy(iv, 0, 0, ivSize);
ivAndCiphertext.copy(cipherText, 0, ivSize);

c = crypto.createDecipheriv('bf-cfb', "somekey", iv.toString("binary"));
res = c.update(cipherText, "binary", 'utf8');
res += c.final('utf8');

知道我做错了什么吗?

EDIT

使用 openssl(加密库是其包装器)直接给出相同的乱码结果:

openssl enc -K the_key_in_hex bf-cfb -d -p -iv the_iv_in_hex -nosalt -nopad -a

所以看起来 Javascript 代码没有问题。


https://github.com/tugrul/node-mcrypt https://github.com/tugrul/node-mcrypt

Encrypt:

var mcrypt = require('mcrypt');

var bfEcb = new mcrypt.MCrypt('blowfish', 'cfb');
var iv = bfEcb.generateIv();

bfEcb.open('somekey', iv);

var cipherText = bfEcb.encrypt('sometext');

console.log(Buffer.concat([iv, cipherText]).toString('base64'));

Decrypt:

var mcrypt = require('mcrypt');
var bfEcb = new mcrypt.MCrypt('blowfish', 'cfb');

var ivAndCiphertext = new Buffer('AyvfjTyg24Y9fVCdjzRPEw==', 'base64');

var ivSize = bfEcb.getIvSize();
var iv = new Buffer(ivSize);
var cipherText = new Buffer(ivAndCiphertext.length - ivSize);

ivAndCiphertext.copy(iv, 0, 0, ivSize);
ivAndCiphertext.copy(cipherText, 0, ivSize);

bfEcb.open('somekey', iv);

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

使用 node.js 解密 mcrypt 编码文本 的相关文章

  • nodeJS require.paths 解决问题

    我试图相对且神秘地需要一个文件 以下情况正在发生 这很有效 这表明 Users marcos Desktop Taper lib utils js myPath Users marcos Desktop Taper lib utils re
  • 如何在 AWS CDK 堆栈中压缩 Node Lambda 依赖项?

    我正在使用 CDK 通过 API Gateway Lambda 和 DynamoDB 创建一个简单的无服务器项目 到目前为止看起来很酷 但是当我向 Lambda 添加外部依赖项时出现以下错误 Runtime ImportModuleErro
  • 使用 Node.JS 客户端库插入 Google Analytics 内容实验

    我正在尝试使用 Node js 客户端库配置内容实验 但无法计算出语法 我应该将主体 实验资源 放置在哪里 如此处所述 https developers google com analytics devguides config mgmt
  • 如何在没有 Express 的情况下通过 Mongoose 与 MongoDB 交互?

    我想要一个可以牢固掌握 CRUD 操作如何工作的环境 到目前为止 我一直在使用views看看数据是什么样子 但由于明显缺乏灵活性 这种方法并不是那么有洞察力 这就像在黑暗中开车一样 现在我希望能够通过 Mongoose 提供的功能来处理 M
  • 使用 Geoserver 中的 Javascript 动态设置 WMS 图层样式

    我的 Web 应用程序通过 Geoserver 2 6 0 从 Postgis 向 OpenLayers 地图提供 WMS 图层 工作正常且符合预期 用户可以通过 WMS 图层的属性 通过 HTML 中的下拉框 过滤 WMS 图层的某些元素
  • AngularJS:如何在 AngularJS 中使用或注入第三方库

    我是 Angular 和 Deployd 的新手 想知道如何一起使用它们 我发现 Deployd 网站中的示例很好 但它只消耗其余 API 数据 我想了解如何将 Deployd 作为 AngularJS 中的服务 例如 通过部署中可用的收集
  • 字符串编码器固定大小输出

    我接到一个任务 需要编写一个具有以下要求的编码器 输入 1 到 8 位的整数 即 12345678 2352 76543 输出 固定大小的 6 位代码 可以包含任何字母数字和符号 a z A Z 0 9 该操作必须是可逆的 因此给定一个代码
  • CasperJS - 在网站上注册并验证 Gmail 上发送的邮件 - 对于 slimer 和 phantom -

    Edit 这是windows的行为 linux就失败了 首先 如果您使用 casper 成功导航 gmail 没有随机等待时间 从 20 秒到 5 分钟 请告诉我 我想在我们的网站上注册 然后使用 Gmail 自动验证我的注册 整个注册步骤
  • 如何在node-mysql查询后获取警告

    如何获取查询执行后识别的相应警告 如下所示 connection query squery function err rows search for OkPacket in 2 dimension array var warningCoun
  • 在 Codeigniter 中使用/嵌入 Ember js

    我即将开始开发一个 Web 应用程序 使用 Ember js 作为前端技术 使用 Codeigniter 作为后端 我遇到的问题是如何在 codeigniter 中嵌入或使用 ember js 可以通过 Web 服务从 codeignite
  • 从网站保存嵌入的 pdf

    我正在编写一个小型 C 应用程序来管理供应商提供的 化学品 安全数据表 目前 我手动搜索该化学品并保存 pdf 并在我的程序中添加指向 pdf 的链接 问题是我还有很多化学品需要处理 所以最好将过程自动化 例如 化学品的部件号如下 2710
  • 在单选按钮选择上提交 Rails 表单

    我有以下 Rails 表单 有效 但我想删除 Submit tag 并在选择单选按钮后立即提交表单 我怎么做 p nbsp nbsp p p p 所以我找到了精确的解决方案 感谢输入人员 它帮助我重新定义了我的谷歌搜索
  • 避免使用 Grunt cssmin 任务来删除重复条目

    在我的 Gruntfile 中 我使用 cssmin grunt contrib cssmin 任务 就像是 cssmin css src dist styles css dest dist styles min css 问题是 style
  • jQuery Deferred - 向 Deferred 合约添加回调

    我正在尝试在现有 Deferred 的状态设置为成功之前向其合约添加另一个异步调用 不要尝试用英语解释这一点 请参阅以下伪代码 when ajax url someUrl data data async true success funct
  • Socket.io 不断重复连接并忽略其他事件

    我正在尝试制作一个网络应用程序 用户可以在其中互相玩环形国际象棋 这是我的 app js 在服务器上 var express require express var app express var http require http Ser
  • 如何在 PHP、HTML 表单和 Javascript 之间传递布尔值

    我有一个 PHP 程序 它使用 HTML 表单并使用 JavaScript 进行验证 HTML 表单中有一个隐藏字段 其中包含一个布尔值 该值由 PHP 设置 由 JavaScript 在提交时进行验证 然后传递到另一个 PHP 页面 当我
  • 从 BLOB 打印 PDF

    我从外部 API 获取 PDF 文件 使用此代码我可以正确下载该文件 var req new XMLHttpRequest req open POST url true req responseType blob req setReques
  • Mongoose MongoDB:更新嵌套数组中的对象

    我有以下架构 var UserSchema new Schema emp no Number skills skill type Schema Types ObjectId ref Skill startDate type Date 然后我
  • 使用 JavaScript 在空闲时隐藏鼠标光标

    是否可以使用JavaScript来设置cursor属性的属性none如果鼠标在一定时间内处于非活动状态 例如五秒 请将其设置回auto当它再次活跃时 EDIT 我意识到none不是有效值cursor财产 尽管如此 许多网络浏览器似乎都支持它
  • 如何找到我的 typescript/react 模块的声明?

    我对前端技术非常 非常 陌生 特别是 React 和 TypeScript 当尝试做一件简单的事情 即使用反应组件时 我的问题出现了https github com ckeditor ckeditor5 https github com c

随机推荐

  • Java HashSet 中元素的排序

    为什么第二组和第三组保持顺序 Integer j new Integer 3 4 5 6 7 8 9 LinkedHashSet
  • 在 Homestead 中配置 php.ini

    我正在尝试更改变量最大输入变量在我的 php ini 文件中指定 How many GET POST COOKIE input variables may be accepted max input vars 2500 和跑步 sudo n
  • 有没有办法在 Visual Basic 6.0 应用程序中添加全局错误处理程序?

    VB 6 0没有任何全局处理程序 为了捕获运行时错误 我们需要在每个我们认为可能发生错误的方法中添加一个处理程序 但是 仍然有一些地方可能被遗漏 所以 我们最终会遇到运行时错误 在应用程序的所有方法中添加错误处理程序 唯一的方法吗 不 无法
  • Windows 中的 SQLAlchemy 引擎绝对路径 URL

    我正在尝试连接到 Windows 7 x64 计算机上的 python 3 3 应用程序中的 sqlite database 文件 为此 文档指出 sqlite
  • IOS Safari URL UTI 分享表

    我正在尝试使用 safari 共享按钮和共享表将当前 URL 从 safari 传递到我的应用程序 我希望它进入我的应用程序 而不是让它成为共享扩展 在 Safari 中 共享表不显示我的应用程序 我已注册以下文档类型 UTI 但未成功 p
  • Asp.NET WebApi 基于约定的方法 Url/Route 查询

    我不确定基于 ASP NET WebAPI 约定的休息服务的 最佳实践 前进方向 该服务需要返回资源的 子属性 eg UsersController public User Get int id returns named user via
  • R Markdown:openBinaryFile:不存在(没有这样的文件或目录)

    我开发了一个闪亮的应用程序 允许用户通过 R Markdown 下载 HTML 报告 我正在尝试将自定义 css 和图像包含到我的 rmarkdown 文件中 但是 我不断收到此错误消息 pandoc Could not fetch eit
  • 使用 Apache Axis2 从 WSDL 文件生成单独的 Java 文件而不是单个存根

    目前 我们使用以下命令从给定的 WSDL 文件生成单个存根 wsdl2java uri filename wsdl 这会生成一个包含所有函数调用等的单个 Java Stub 问题是这次生成的 Java Stub 的大小超过 20mb 这使得
  • 如何在symfony2中提交表单ajax?

    我即将使用 Ajax 提交我的表单 我已使用 Ajax 成功提交我的表单POST但不知道如何使用 AjaxSymfony builform builder gt add name text array constraints gt arra
  • 按定义的间隔切割

    R中有没有某种方法可以按定义的间隔进行切割而没有任何中断 例如 如果我想要精确区间 1 10 内的值 默认情况下cut将这个区间分成更小的区间 要切入预定义的间隔 您可以使用以下命令指定中断向量breaks范围 定义一些数据 x lt sa
  • iOS:在故事板中将子类从 UIView 更改为 UIScrollView

    我创建了一个基于故事板的项目 在视图控制器的视图之一中需要放置一些额外的元素 这会导致视图高度增加 使得视图现在必须是可滚动的 是否可以简单地将故事板中 UIView 的类类型更改为 UIScrollView 它真的会将顶级 UIView
  • Neo4JClient:如何创建关系?

    我看到了一篇具有相同标题的帖子 但不幸的是无法通过查看给定的示例找到解决方案 我通过以下方式创建了节点 private static void createExampleNetwork GraphClient client try Cyph
  • gcc 编译器忽略调试构建的未初始化变量警告

    gcc编译器忽略uninitialized variable warning用于调试构建 这对我来说看起来很奇怪 有人可以帮助我理解这一点吗 Program include
  • Rails-嵌套 content_tag

    我正在尝试将内容标签嵌套到自定义帮助器中 以创建如下内容 div class field div
  • Quartz 调度程序最大线程数属性

    我有以下情况 计划运行 8 个任务org quartz threadPool threadCount设置为 5 但实际上我可以看到所有 8 个任务都在运行 这怎么可能 如果我设置org quartz threadPool threadCou
  • Mockito 因无效参数名称异常而启用内联模拟而失败

    我已启用内联模拟 https static javadoc io org mockito mockito core 2 13 0 org mockito Mockito html 39这样我就可以模拟最终类 但现在使用 Junit 运行测试
  • Laravel 5.4 中不允许使用 namespace() 启动路由分组吗? [复制]

    这个问题在这里已经有答案了 使用 Laravel 5 4 确实在有关路由分组的文档中 并且给出了一个示例命名空间 https laravel com docs 5 4 routing route group namespaces Route
  • Rails:上传文件或存储 url

    我正在开发一个表单 我希望允许用户上传文件或输入现有文件的 URL 这个想法是允许用户将各种 多媒体 文件附加到条目中 其中一些可能是硬盘驱动器中的文件 例如图像 Word 文档等 有些可能是网址 youtube 视频 flickr 上的图
  • Marshal 无法使用默认过程转储哈希(TypeError)

    我有这个 ruby 脚本 可以生成哈希并将其保存到文件中 有时该文件不存在或为空 所以我总是先检查它是否存在 然后我将旧值加载到我的哈希中并尝试再次保存 我已经为此苦苦挣扎了很长一段时间 这是一个示例 newAppName ARGV 0 n
  • 使用 node.js 解密 mcrypt 编码文本

    我使用 PHP 的 mcrypt 用 Blowfish 编码了文本 td mcrypt module open blowfish cfb iv mcrypt create iv mcrypt enc get iv size td MCRYP