栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

XML到Node.js中的PEM

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XML到Node.js中的PEM

我不是一个真正的node.js开发人员,所以这很hack
..这是一个应从base64模数和指数输出RSA公钥PEM的函数。我将基于Trevor关于node.js

verify
期望PEM 的评论。

此函数以十六进制组成ASN.1 DER结构,然后对其进行十六进制解码,然后对其进行base64编码,然后将其夹在

-----BEGIN PRIVATEKEY-----
和之间
-----END PRIVATE KEY-----
。毕竟,这就是PEM。

function rsaPublicKeyPem(modulus_b64, exponent_b64) {    function prepadSigned(hexStr) {        msb = hexStr[0]        if ( (msb>='8' && msb<='9') ||  (msb>='a' && msb<='f') ||  (msb>='A'&&msb<='F')) { return '00'+hexStr;        } else { return hexStr;        }    }    function toHex(number) {        var nstr = number.toString(16)        if (nstr.length%2==0) return nstr        return '0'+nstr    }    // enpre ASN.1 DER length field    // if <=127, short form    // if >=128, long form    function enpreLengthHex(n) {        if (n<=127) return toHex(n)        else { n_hex = toHex(n) length_of_length_byte = 128 + n_hex.length/2 // 0x80+numbytes return toHex(length_of_length_byte)+n_hex        }    }    var modulus = new Buffer(modulus_b64,'base64');    var exponent = new Buffer(exponent_b64, 'base64');    var modulus_hex = modulus.toString('hex')    var exponent_hex = exponent.toString('hex')    modulus_hex = prepadSigned(modulus_hex)    exponent_hex = prepadSigned(exponent_hex)    var modlen = modulus_hex.length/2    var explen = exponent_hex.length/2    var enpred_modlen = enpreLengthHex(modlen)    var enpred_explen = enpreLengthHex(explen)    var enpred_pubkey = '30' +         enpreLengthHex( modlen +  explen +  enpred_modlen.length/2 +  enpred_explen.length/2 + 2        ) +         '02' + enpred_modlen + modulus_hex +        '02' + enpred_explen + exponent_hex;    var seq2 =         '30 0d ' +          '06 09 2a 86 48 86 f7 0d 01 01 01' +          '05 00 ' +        '03' + enpreLengthHex(enpred_pubkey.length/2 + 1) +        '00' + enpred_pubkey;    seq2 = seq2.replace(/ /g,'');    var der_hex = '30' + enpreLengthHex(seq2.length/2) + seq2;    der_hex = der_hex.replace(/ /g, '');    var der = new Buffer(der_hex, 'hex');    var der_b64 = der.toString('base64');    var pem = '-----BEGIN PUBLIC KEY-----n'         + der_b64.match(/.{1,64}/g).join('n')         + 'n-----END PUBLIC KEY-----n';    return pem}

用十六进制字符串进行二进制操作?uck ..但是嘿,这是一个hack。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427122.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号