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

寻求PHP openssl_private_encrypt函数的JavaScript等效实现

PHP中openssl_private_encrypt的JavaScript等效实现

要实现和PHP openssl_private_encrypt 输出完全一致的JavaScript代码,需要匹配其核心逻辑:使用RSA私钥对数据进行PKCS#1 v1.5填充加密,最终输出Base64编码结果。

核心说明

PHP的openssl_private_encrypt默认采用OPENSSL_PKCS1_PADDING填充方式,直接对原始明文进行PKCS#1 v1.5格式填充后用私钥加密,不做哈希处理。原生Web Crypto API不支持该操作(仅支持公钥RSA-OAEP加密、私钥RSASSA-PKCS1-v1_5签名),因此需要借助第三方库jsrsasign实现。

JavaScript实现代码

1. 安装依赖

npm install jsrsasign

2. 实现函数及测试

const { KEYUTIL } = require('jsrsasign');

function opensslPrivateEncrypt(data, privateKeyPem) {
    // 解析PEM格式RSA私钥
    const rsaKey = KEYUTIL.getKey(privateKeyPem);
    // 执行PKCS#1 v1.5填充的私钥加密,对应PHP默认逻辑
    const encryptedHex = rsaKey.privateEncrypt(data, 'pkcs1');
    // 十六进制转二进制后进行Base64编码
    const buffer = Buffer.from(encryptedHex, 'hex');
    return buffer.toString('base64');
}

// 测试用例
const inputData = 'RomaxaCoder';
const privateKeyPem = `-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCy745x8AqGKlTWBu2Ub80boPaQxo/midZ4LHZ0zbPpiCAfkADN
VYSe8OckPKutdjPX7SNAx66PgQRH1xrz1gysbRrf8K/mA0LQ00MKBFaFottWt5cC
IaUS9zvCgPw7prwng3hkGShnvTSMXiKFyt1E3RTvpXRk0u46D6hKiy+TSQIDAQAB
AoGBAJe1jjNCDtoz19vi4doBdIhhT8vt3iHbafBX2lMr+MceeAXqpRNy10+e9op9
uh0G4+vGDialZnYbMBLs6Ngl+nVnzn+cN1MMJ18brgf3biZKzVzK9wmOW4eycWaR
9eLa7/+ns8Cw5GsLJdG+OHR2gXRXU4hzUFdf90UUbP+kuqK1AkEA2X04XznFDNmT
NuhyCixwinlziazJBp/81jjaBhYj3cG0nTF0Gactc/yD0yudbrMqjLBfts+FbG3Z
yFHKrAB/cwJBANKetll3M3aCGsermEK+9hbB8yMihCju6pAwClUNkrAgrm9zU4LP
WkC81RDzXbz+pfIqpopfn34F3+U2iMiOe1MCQCXpTgpLZ631v1Oy8S4U0QlSYnF9
TQ16lfhBsL+e3GGrgnBkTniqS6IMQm5tC+RgFuqvU//p7LgZ7fydRVb2P0ECQFp9
YADuKskmutTAj6lVnCtI5upYgQmJJHQQf8/tBfHwCKHPnbic17zqpGwk80go7Ckw
U98tmDuv0HMNTBVGygsCQALck7VNBRjL9iFzJMFis+alcP1ZC88wOLPvIxYbevUH
c8rZwRqt1aHwaWOoxcVom+tyzRC6gEYoBarmU1bX4No=
-----END RSA PRIVATE KEY-----`;

const output = opensslPrivateEncrypt(inputData, privateKeyPem);
console.log(output);

对应PHP示例代码

<?php

openssl_private_encrypt(
    'RomaxaCoder',
    $partialSign,
    <<<PK
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCy745x8AqGKlTWBu2Ub80boPaQxo/midZ4LHZ0zbPpiCAfkADN
VYSe8OckPKutdjPX7SNAx66PgQRH1xrz1gysbRrf8K/mA0LQ00MKBFaFottWt5cC
IaUS9zvCgPw7prwng3hkGShnvTSMXiKFyt1E3RTvpXRk0u46D6hKiy+TSQIDAQAB
AoGBAJe1jjNCDtoz19vi4doBdIhhT8vt3iHbafBX2lMr+MceeAXqpRNy10+e9op9
uh0G4+vGDialZnYbMBLs6Ngl+nVnzn+cN1MMJ18brgf3biZKzVzK9wmOW4eycWaR
9eLa7/+ns8Cw5GsLJdG+OHR2gXRXU4hzUFdf90UUbP+kuqK1AkEA2X04XznFDNmT
NuhyCixwinlziazJBp/81jjaBhYj3cG0nTF0Gactc/yD0yudbrMqjLBfts+FbG3Z
yFHKrAB/cwJBANKetll3M3aCGsermEK+9hbB8yMihCju6pAwClUNkrAgrm9zU4LP
WkC81RDzXbz+pfIqpopfn34F3+U2iMiOe1MCQCXpTgpLZ631v1Oy8S4U0QlSYnF9
TQ16lfhBsL+e3GGrgnBkTniqS6IMQm5tC+RgFuqvU//p7LgZ7fydRVb2P0ECQFp9
YADuKskmutTAj6lVnCtI5upYgQmJJHQQf8/tBfHwCKHPnbic17zqpGwk80go7Ckw
U98tmDuv0HMNTBVGygsCQALck7VNBRjL9iFzJMFis+alcP1ZC88wOLPvIxYbevUH
c8rZwRqt1aHwaWOoxcVom+tyzRC6gEYoBarmU1bX4No=
-----END RSA PRIVATE KEY-----
PK
);

var_dump(base64_encode($partialSign));

预期输出

gBeCtvLsVAYI2ubm1Q2GHZoZdCYwGAIoDHxBf4K2O6tJ5FTojHS+n2OkMyNkLuAN93YlnPlefU4WV65OikhdJSghOsT4f8ZER01lweSvPNMgEdEABlHDDv7mWFwNkGi4qvSCgak+xP45G6zPUZJ3uHO5U4Ki1j3WQR0tyrRr5vI=

内容的提问来源于stack exchange,提问作者Roman Bakirov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:44:59