billrolbin 2023-06-02 19:52 采纳率: 80.8%
浏览 57
已结题

c# 执行node.js的程序

抖音小程序的获取手机号码的代码是用node.js写的,但我们的后端是C#,能否在C#里执行node.js 获取到手机号码呢?

// Node.js
const crypto = require("crypto");

function decrypt(encryptedData, sessionKey, iv) {
  const decipher = crypto.createDecipheriv(
    "aes-128-cbc",
    Buffer.from(sessionKey, "base64"),
    Buffer.from(iv, "base64")
  );
  let ret = decipher.update(encryptedData, "base64");
  ret += decipher.final();
  return ret;
}




小程序取得手机号码:
https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/guide/open-capabilities/sensitive-data-process

https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/guide/open-capabilities/acquire-phone-number-acquire

下面是用python取手机号码的例子,如果能用C#调用能实现都可以。

# python
import base64

# https://www.pycryptodome.org/
# pip install pycryptodome
from Crypto.Cipher import AES


def decrypt(encrypted_data, session_key, iv):
    data = base64.b64decode(encrypted_data)
    _key = base64.b64decode(session_key)
    _iv = base64.b64decode(iv)

    cipher = AES.new(_key, AES.MODE_CBC, _iv)
    return cipher.decrypt(data)

  • 写回答

8条回答 默认 最新

  • 语言-逆行者 2023-06-02 20:12
    关注
    获得1.65元问题酬金

    基于new bing的实现:
    在C#中执行Node.js的代码是可行的,可以使用第三方的Node.js运行环境,如edge-js或node-chakra等库。

    具体操作流程如下:

    安装edge-js或者node-chakra。
    在C#代码中引入Node.js模块并调用该模块的方法。
    示例代码如下:

    using System;
    using System.Threading.Tasks;
    using EdgeJs;
    
    public class Program
    {
        public async static Task Main(string[] args)
        {
            var decrypt = Edge.Func(@"
                const crypto = require('crypto');
                return function (encryptedData, sessionKey, iv, callback) {
                    const decipher = crypto.createDecipheriv(
                        'aes-128-cbc',
                        Buffer.from(sessionKey, 'base64'),
                        Buffer.from(iv, 'base64')
                    );
                    let ret = decipher.update(encryptedData, 'base64', 'utf8');
                    ret += decipher.final('utf8');
                    callback(null, ret);
                }
            ");
    
            var result = await decrypt("encrypted data", "session key", "iv");
            Console.WriteLine(result); // 输出解密后的数据
        }
    }
    
    
    

    需要注意的是,在使用Edge.js或node-chakra时需要先安装Node.js环境。

    评论

报告相同问题?

问题事件

  • 系统已结题 6月10日
  • 赞助了问题酬金15元 6月2日
  • 创建了问题 6月2日

悬赏问题

  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题
  • ¥20 请问有人知道怎么用工艺库里面的sdb文件通过virtuoso导出来library里面每个cell的symbol吗?
  • ¥20 海思 nnie 编译 报错
  • ¥50 决策面并仿真,要求有仿真结果图