You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加密shell脚本转NodeJS时xxd -r -p命令的等价实现求助

xxd -r -p 功能的Node.js实现

xxd -r -p的作用是将纯十六进制字符串转换为原始二进制字节流,Node.js 内置的Buffer模块可直接实现该能力,无需第三方依赖:

// 输入:十六进制字符串,输出:等效于xxd -r -p输出的二进制Buffer
const rawBinary = Buffer.from('你的十六进制字符串', 'hex');

整套Shell加密命令的完整复现

你给出的Shell命令完整执行逻辑为:将输入的十六进制串转二进制后,用指定公钥做PKCS1填充的RSA加密,最后输出base64格式的加密结果。可通过Node.js内置crypto模块完整复现,代码如下:

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

// 替换为你的随机十六进制串
const randomHexString = '<Random_hex_string>';
// 等价于xxd -r -p的转换逻辑
const rawBuffer = Buffer.from(randomHexString, 'hex');
// 读取公钥文件
const publicKey = fs.readFileSync('public-key.pem');
// 匹配openssl rsautl -encrypt -pkcs参数执行加密
const encryptedBuffer = crypto.publicEncrypt({
  key: publicKey,
  padding: crypto.constants.RSA_PKCS1_PADDING
}, rawBuffer);
// 等价于Shell结尾的base64转换,得到最终结果
const ENCRYPT_KEY = encryptedBuffer.toString('base64');

注意事项

  • 代码中指定的RSA_PKCS1_PADDING是openssl rsautl -pkcs参数对应的默认填充方式,不要修改为其他填充方式,否则加密结果和Shell执行结果不一致。
  • 如果你的公钥是DER等非PEM格式,需要先转换为PEM格式再调用,或在publicEncrypt的配置项中指定format: 'der'以及对应的公钥类型。

内容的提问来源于stack exchange,提问作者Weyden Herrera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:06:03