【求助】RSA的PHP代码转换为JS代码
本帖最后由 Beryl 于 2025-2-17 09:52 编辑<function decrypted($str){
//RSA公钥
$public_key = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDP5hzPUW5RFeE2xBT1ERB3hHZI\nVotn/qatWhgc1eZof09qKjElFN6Nma461ZAwGpX4aezKP8Adh4WJj4u2O54xCXDt\nwzKRqZO2oNZkuNmF2Va8kLgiEQAAcxYc8JgTN+uQQNpsep4n/o1sArTJooZIF17E\ntSqSgXDcJ7yDj5rc7wIDAQAB\n-----END PUBLIC KEY-----";
$pu_key = openssl_pkey_get_public($public_key);
$key_len = openssl_pkey_get_details($pu_key)['bits'];
$decrypted= "";
$part_len = $key_len / 8;
$parts = str_split(base64_decode($str), $part_len);
foreach ($parts as $part) {
$decrypted_temp = '';
openssl_public_decrypt($part, $decrypted_temp, $pu_key);
$decrypted .= $decrypted_temp;
}
return $decrypted;
}
这段PHP代码转为JS代码是怎么的?最好给出酷9的或Node.js,可以使用引入库。 找万能的 deepseek nodejs简单,引入crypto库就行,酷9可能无法支持引入外部js库,实现估计得手工实现RSA,那个难度就太大了 const crypto = require('crypto');
function decrypted(str) {
// RSA 公钥
const publicKey = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDP5hzPUW5RFeE2xBT1ERB3hHZI
Votn/qatWhgc1eZof09qKjElFN6Nma461ZAwGpX4aezKP8Adh4WJj4u2O54xCXDt
wzKRqZO2oNZkuNmF2Va8kLgiEQAAcxYc8JgTN+uQQNpsep4n/o1sArTJooZIF17E
tSqSgXDcJ7yDj5rc7wIDAQAB
-----END PUBLIC KEY-----`;
// 解析 base64 编码的密文
const buffer = Buffer.from(str, 'base64');
// 获取公钥长度(单位:字节)
const keyLen = 128; // 对于 1024-bit 密钥,字节长度为 128
const partLen = keyLen;
let decrypted = '';
// 逐块解密
for (let i = 0; i < buffer.length; i += partLen) {
const chunk = buffer.slice(i, i + partLen);
const decryptedChunk = crypto.publicDecrypt(
{
key: publicKey,
padding: crypto.constants.RSA_NO_PADDING, // 与 PHP 保持一致
},
chunk
);
decrypted += decryptedChunk.toString('utf8');
}
return decrypted;
}
// 示例调用
const encryptedString = "your_base64_encrypted_string_here";
console.log(decrypted(encryptedString)); 友善的肥羊 发表于 2025-2-17 12:12
nodejs简单,引入crypto库就行,酷9可能无法支持引入外部js库,实现估计得手工实现RSA,那个难度就太大了 ...
酷9最新版支持引入库了,但是没有例子,不知道怎么用法。//加密库引用示例
const CryptoJS = require( "crypto" );
const jsencrypt = require( "jsencrypt" );
let base64String = "" ; //url Base64编码
let url = CryptoJS.enc.Base64.parse(base64String).toString( CryptoJS.enc.Utf8);
const response = ku9.request( url );这是内置的示例,const CryptoJS = require( "crypto" );用其他代码试过了没问题。const jsencrypt = require( "jsencrypt" );不知道怎么用法。 另外JS里:const keyLen = 128; // 对于 1024-bit 密钥,字节长度为 128,JS这样设置128不知是否正确。 本帖最后由 tqx5201 于 2025-2-17 20:14 编辑
//ku9调用示例
function main(item) {
const JSEncrypt = require("jsencrypt");
// 创建一个新的JSEncrypt实例
const encryptor = new JSEncrypt();
const privateKey = `-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgG0NgggMs1iSD9+SZ6FYLJ8RtbxBsFWQDegN5/EAtXi4ZeFf9J7y
Z27T2TZRysBvkqiJhs/jJT6RYmwaCFQ8n98uboedEqyfn6GYqbdA288no3z+y6bY
BRcJjEMocLqKEtyZc8PAF1Shas+7JiZkRSNj7n9tnu9cnit1Vbps2z7xAgMBAAEC
gYAyGCdoPTVRdV8XS3CRPCjbNU5vWRmAZHkO5Pxrx/CUsNgUDHkZXq7GyUgZXL8v
YNFU3D/yVRxxvmUg1WCIGYUyat1XXDNpPqc7eVjHi7yl+ybr5LfhYhL580vMtFHP
XTMRQap8wKs554oEO4f5OO0TAuTLztBM9xlg2+yDWyWKAQJBAMvM3dqYcnnpyKAA
apsto8ZlXInbLp7iUUtkb5AJZHTte7wGnJuFAoVNnqwVEaKRleykN/ESALALnfsc
/uihmCECQQCI/BI4sAIoxH+EcNyzqJfwKbweIwXByy1MBdRKprDIF2uOY0swK62C
GRhIhgqR+hCTBZ2N8qmURlxq8i86PIzRAkEAlRj6LdRd28cnWbc0Rvbq3FiHjOtn
fiHAq9F8tPnKHqknXvXPWQ/EOlYBAZAgaLjt4ER8EMfE7QZyu6YI75RZQQJAE2DN
VxWXCJtbiqnInuWvsLrGsOC1dMfAPavpbzILehLOFVN4lHTpU6knJUNJBYOBirrV
ofn9AUu+0SY3hh6AsQJBAJm9BB9lwEi2kgRdJMnFa/IOG1AvJ50ORAWi2YiuD5kA
Lx7FizyLfgSKY8rNmlsJFl+gGmQ+FdHJT7VaJBriFfw=
-----END RSA PRIVATE KEY-----`;
encryptor.setPrivateKey(privateKey);
var encrypted ='HhfVVAQHRFYOdKPEpkSCp/4wdhk5R85qkKcmK/Fn4wnKC+Bq+4kAuBnBdUJ4wfs4oZNogR99APOTOZyJ1cgOf0zzHq3Zm1AkHq3dQ5fhlf0vMDhiC3kwIRfLeUxE6Vf1I6thSvCKoAECeOxKYy2KTbGDIdYnViBRE/qfks4LD/w=';
//私钥解密 ,网上说公加私解,私加公解,但我测试只能公加私解,私加私解,不是私加公解
let decrypted = encryptor.decrypt(encrypted);
//console.log("解密后的数据是hello:", decrypted);
return { url: 'http://xxx.com/'+decrypted+'.m3u8'}
}
学习学习 !! 学习楼上几位的
页:
[1]