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

如何在Node.js中将Windows SID转换为ObjectId?

Windows安全标识符(SID)转ObjectId的Node.js实现
  • 需求:将Windows安全标识符(SID)转换为Azure AD ObjectId,目前已有PowerShell实现方案,现提供Node.js版本的实现
  • 示例:
    • 输入SID:S-1-12-1-1943430372-1249052806-2496021943-3034400218
    • 输出ObjectId:73d664e4-0886-4a73-b745-c694da45ddb4

实现代码

function sidToObjectId(sid) {
    // 解析SID,提取最后四个32位整数部分
    const parts = sid.split('-');
    if (parts.length < 8) {
        throw new Error('无效的SID格式');
    }
    const sidNumbers = parts.slice(4, 8).map(num => parseInt(num, 10));
    
    // 将每个整数转换为4字节小端序的Buffer
    const buffers = sidNumbers.map(num => {
        const buf = Buffer.alloc(4);
        buf.writeUInt32LE(num, 0);
        return buf;
    });
    
    // 拼接所有Buffer得到16字节的UUID原始数据
    const uuidBuffer = Buffer.concat(buffers);
    
    // 转换为标准UUID格式
    const uuidParts = [
        uuidBuffer.toString('hex', 0, 4),
        uuidBuffer.toString('hex', 4, 6),
        uuidBuffer.toString('hex', 6, 8),
        uuidBuffer.toString('hex', 8, 10),
        uuidBuffer.toString('hex', 10, 16)
    ];
    
    return uuidParts.join('-');
}

// 测试示例
const testSid = 'S-1-12-1-1943430372-1249052806-2496021943-3034400218';
console.log(sidToObjectId(testSid)); // 输出:73d664e4-0886-4a73-b745-c694da45ddb4

转换说明

  1. SID解析:拆分SID字符串,提取出用于生成ObjectId的最后四个32位十进制整数
  2. 字节转换:将每个整数以小端序写入4字节缓冲区,匹配Azure AD ObjectId的存储规则
  3. Buffer拼接:将四个4字节缓冲区合并为16字节的原始UUID数据
  4. 格式转换:将16字节数据按UUID分段规则转换为带连字符的标准格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:39:27