加密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
相关产品推荐
相关产品推荐

