找回密码
 注册需人工审核(节假日除外)
搜索
查看: 326|回复: 10

【求助】RSA的PHP代码转换为JS代码

[复制链接]

签到天数: 74 天

[LV.6]渐入佳境

发表于 5 天前 | 显示全部楼层 |阅读模式
悬赏20TV币未解决
本帖最后由 Beryl 于 2025-2-17 09:52 编辑
  1. <function decrypted($str){
  2.    //RSA公钥
  3.    $public_key = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDP5hzPUW5RFeE2xBT1ERB3hHZI\nVotn/qatWhgc1eZof09qKjElFN6Nma461ZAwGpX4aezKP8Adh4WJj4u2O54xCXDt\nwzKRqZO2oNZkuNmF2Va8kLgiEQAAcxYc8JgTN+uQQNpsep4n/o1sArTJooZIF17E\ntSqSgXDcJ7yDj5rc7wIDAQAB\n-----END PUBLIC KEY-----";
  4.    $pu_key = openssl_pkey_get_public($public_key);

  5.    $key_len = openssl_pkey_get_details($pu_key)['bits'];
  6.    $decrypted= "";
  7.    $part_len = $key_len / 8;
  8.    $parts = str_split(base64_decode($str), $part_len);

  9.    foreach ($parts as $part) {
  10.         $decrypted_temp = '';
  11.         openssl_public_decrypt($part, $decrypted_temp, $pu_key);
  12.         $decrypted .= $decrypted_temp;
  13.         }
  14.         return $decrypted;
  15.    }
复制代码

这段PHP代码转为JS代码是怎么的?最好给出酷9的或Node.js,可以使用引入库。

点评

酷9入库怎么用,源列表地址是什么  发表于 昨天 07:59

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 159 天

[LV.7]炉火纯青

发表于 5 天前 | 显示全部楼层

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 4 天

[LV.2]登堂入室

发表于 5 天前 | 显示全部楼层
nodejs简单,引入crypto库就行,酷9可能无法支持引入外部js库,实现估计得手工实现RSA,那个难度就太大了

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 4 天

[LV.2]登堂入室

发表于 5 天前 | 显示全部楼层
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));

点评

crypto.constants.RSA_NO_PADDING这个酷9应该没有  发表于 5 天前

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 74 天

[LV.6]渐入佳境

 楼主| 发表于 5 天前 | 显示全部楼层
友善的肥羊 发表于 2025-2-17 12:12
nodejs简单,引入crypto库就行,酷9可能无法支持引入外部js库,实现估计得手工实现RSA,那个难度就太大了 ...

酷9最新版支持引入库了,但是没有例子,不知道怎么用法。
  1. //加密库引用示例
  2. const CryptoJS = require( "crypto" );
  3. const jsencrypt = require( "jsencrypt" );
  4. let base64String = "" ; //url Base64编码
  5. let url = CryptoJS.enc.Base64.parse(base64String).toString( CryptoJS.enc.Utf8);
  6. const response = ku9.request( url );
复制代码
这是内置的示例,const CryptoJS = require( "crypto" );用其他代码试过了没问题。const jsencrypt = require( "jsencrypt" );不知道怎么用法。 另外JS里:const keyLen = 128; // 对于 1024-bit 密钥,字节长度为 128,JS这样设置128不知是否正确。

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 86 天

[LV.6]渐入佳境

发表于 5 天前 来自手机 | 显示全部楼层
本帖最后由 tqx5201 于 2025-2-17 20:14 编辑
  1. //ku9调用示例
  2. function main(item) {
  3. const JSEncrypt = require("jsencrypt");

  4. // 创建一个新的JSEncrypt实例
  5. const encryptor = new JSEncrypt();

  6. const privateKey = `-----BEGIN RSA PRIVATE KEY-----
  7. MIICXAIBAAKBgG0NgggMs1iSD9+SZ6FYLJ8RtbxBsFWQDegN5/EAtXi4ZeFf9J7y
  8. Z27T2TZRysBvkqiJhs/jJT6RYmwaCFQ8n98uboedEqyfn6GYqbdA288no3z+y6bY
  9. BRcJjEMocLqKEtyZc8PAF1Shas+7JiZkRSNj7n9tnu9cnit1Vbps2z7xAgMBAAEC
  10. gYAyGCdoPTVRdV8XS3CRPCjbNU5vWRmAZHkO5Pxrx/CUsNgUDHkZXq7GyUgZXL8v
  11. YNFU3D/yVRxxvmUg1WCIGYUyat1XXDNpPqc7eVjHi7yl+ybr5LfhYhL580vMtFHP
  12. XTMRQap8wKs554oEO4f5OO0TAuTLztBM9xlg2+yDWyWKAQJBAMvM3dqYcnnpyKAA
  13. apsto8ZlXInbLp7iUUtkb5AJZHTte7wGnJuFAoVNnqwVEaKRleykN/ESALALnfsc
  14. /uihmCECQQCI/BI4sAIoxH+EcNyzqJfwKbweIwXByy1MBdRKprDIF2uOY0swK62C
  15. GRhIhgqR+hCTBZ2N8qmURlxq8i86PIzRAkEAlRj6LdRd28cnWbc0Rvbq3FiHjOtn
  16. fiHAq9F8tPnKHqknXvXPWQ/EOlYBAZAgaLjt4ER8EMfE7QZyu6YI75RZQQJAE2DN
  17. VxWXCJtbiqnInuWvsLrGsOC1dMfAPavpbzILehLOFVN4lHTpU6knJUNJBYOBirrV
  18. ofn9AUu+0SY3hh6AsQJBAJm9BB9lwEi2kgRdJMnFa/IOG1AvJ50ORAWi2YiuD5kA
  19. Lx7FizyLfgSKY8rNmlsJFl+gGmQ+FdHJT7VaJBriFfw=
  20. -----END RSA PRIVATE KEY-----`;
  21. encryptor.setPrivateKey(privateKey);

  22. var encrypted ='HhfVVAQHRFYOdKPEpkSCp/4wdhk5R85qkKcmK/Fn4wnKC+Bq+4kAuBnBdUJ4wfs4oZNogR99APOTOZyJ1cgOf0zzHq3Zm1AkHq3dQ5fhlf0vMDhiC3kwIRfLeUxE6Vf1I6thSvCKoAECeOxKYy2KTbGDIdYnViBRE/qfks4LD/w=';
  23.       
  24. //私钥解密 ,网上说公加私解,私加公解,但我测试只能公加私解,私加私解,不是私加公解
  25. let decrypted = encryptor.decrypt(encrypted);
  26. //console.log("解密后的数据是hello:", decrypted);
  27. return { url: 'http://xxx.com/'+decrypted+'.m3u8'}
  28. }
复制代码

点评

可以  发表于 4 天前

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 21 天

[LV.4]初窥堂奥

发表于 昨天 07:47 | 显示全部楼层
学习  学习 !!

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 14 天

[LV.3]圆转纯熟

发表于 昨天 13:38 | 显示全部楼层
学习楼上几位的

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

本版积分规则

Archiver|手机版|小黑屋|IPTV论坛 | 管理员邮箱:a@8494.net

本站以兴趣爱好为宗旨,非经营性质,不以任何形式收取任何费用。IPTV论坛没有任何官方Q群,V群,T群,禁止留任何联系方式,请配合。

免责声明:本站上述内容来自网络,不得用于商业或非法用途,您必须在下载后24小时内,从设备中删除,否则后果自负。如内容侵犯您的版权、著作权,请联系我,第一时间处理。

GMT+8, 2025-2-22 20:49 , Processed in 0.098619 second(s), 17 queries .

IPTV论坛 创建于 2023年5月1日