如何在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
- 输入SID:
实现代码
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
转换说明
- SID解析:拆分SID字符串,提取出用于生成ObjectId的最后四个32位十进制整数
- 字节转换:将每个整数以小端序写入4字节缓冲区,匹配Azure AD ObjectId的存储规则
- Buffer拼接:将四个4字节缓冲区合并为16字节的原始UUID数据
- 格式转换:将16字节数据按UUID分段规则转换为带连字符的标准格式
内容的提问来源于stack exchange,提问作者user1934968
相关产品推荐
相关产品推荐

