简体   繁体   English

如何在javascript中将RSA模数转换为base64?

[英]How to convert RSA modulus into base64 in javascript?

I have parsed a modulus from public key as我已将公钥中的模数解析为

$openssl rsa -pubin -inform PEM -text -noout < public.key

which gives output给出输出

writing RSA key
Public-Key: (4096 bit)
Modulus:
    00:de:db:44:38:7a:ae:c8:f5:6b:95:83:87:be:1c:
    28:54:84:2b:d5:03:d5:3e:94:1a:ed:60:fb:aa:8c:
    4a:3e:c0:2e:00:8a:58:0b:00:fb:18:13:62:52:5b:
    fd:ce:55:dc:f4:4a:5c:14:d6:0c:f1:9f:cd:94:b1:
    c6:4d:4c:b7:c9:ef:5d:7d:88:04:e8:20:2c:7b:bd:
    33:5c:94:27:92:4d:ae:5a:76:45:c3:da:e1:2e:73:
    a6:80:f8:04:7b:d5:6f:3c:50:1f:7e:2e:a1:0f:d8:
    6c:f0:ea:3d:c3:01:94:57:3f:28:de:5f:dc:f4:c2:
    01:c5:7e:bc:a2:4d:bc:83:8d:23:26:f0:f2:f1:1d:
    cb:e4:9b:3c:e8:db:be:27:5a:f2:9a:fa:3b:ad:96:
    ac:4a:c8:d4:5e:22:bd:59:5e:cb:35:16:f6:54:a6:
    c1:7b:8d:e1:b7:63:7d:c7:e4:54:43:c1:ba:7d:e0:
    85:bb:2a:9b:5c:3e:25:59:6e:78:61:98:41:6c:6b:
    76:75:96:16:39:48:42:fd:0c:41:cf:47:1c:8c:a1:
    0a:b2:f1:24:c8:b2:c0:7e:07:95:8d:ed:e9:69:91:
    35:b0:4f:fd:d8:ec:db:5a:ef:5f:e7:44:a2:4c:f2:
    76:e1:10:e4:7e:e2:d5:07:65:85:4b:a7:a3:69:fa:
    7e:0b:c1:31:46:8c:5a:4f:8e:00:4e:c2:d5:6c:6a:
    51:8a:9e:27:b1:f6:1e:c6:f8:2d:95:f9:f3:e2:ad:
    98:94:44:01:8f:f4:60:2a:ac:7e:d4:28:0c:3e:1a:
    f7:39:bd:4e:4f:ab:84:13:c5:5c:8b:70:b6:0a:98:
    4a:23:de:b4:38:e2:51:ff:07:39:24:5f:2d:b8:43:
    66:5c:87:3c:66:9c:a6:ca:8d:a7:30:d4:67:fc:ae:
    7f:18:0b:f8:60:61:85:6a:65:d6:f2:fe:b8:fe:e7:
    e4:e8:ec:c4:5d:9a:dc:d9:fe:b4:df:30:71:81:50:
    9c:e8:9a:30:89:e1:6d:6c:9a:22:f1:a8:eb:60:31:
    80:1a:8f:3c:14:07:4c:e8:6d:8f:7d:07:d7:ba:ec:
    ba:21:63:64:b3:a5:bc:03:a0:e4:c5:0d:94:d9:a3:
    9a:af:e2:dd:bf:ac:56:2b:32:e8:be:c5:e6:11:16:
    f1:90:7c:50:6a:82:a6:0b:0c:3e:3f:8e:eb:cf:2b:
    51:8b:d7:02:6a:f3:8b:ae:93:2f:0c:e2:63:7f:ff:
    f7:ab:e4:5d:1f:fa:9b:12:62:fe:8f:4b:90:5d:d2:
    39:e4:b1:9b:71:80:36:0c:cc:b3:dd:de:21:19:80:
    fe:42:b3:96:46:f4:fb:de:54:51:77:4e:82:d7:c0:
    8a:bf:c9
Exponent: 65537 (0x10001)

Now I would like to get base64 of that modulus.现在我想得到那个模数的base64 I have tried:我努力了:

const modulus = `00:de:db:44:38:7a:ae:c8:f5:6b:95:83:87:be:1c:
28:54:84:2b:d5:03:d5:3e:94:1a:ed:60:fb:aa:8c:
4a:3e:c0:2e:00:8a:58:0b:00:fb:18:13:62:52:5b:
fd:ce:55:dc:f4:4a:5c:14:d6:0c:f1:9f:cd:94:b1:
c6:4d:4c:b7:c9:ef:5d:7d:88:04:e8:20:2c:7b:bd:
33:5c:94:27:92:4d:ae:5a:76:45:c3:da:e1:2e:73:
a6:80:f8:04:7b:d5:6f:3c:50:1f:7e:2e:a1:0f:d8:
6c:f0:ea:3d:c3:01:94:57:3f:28:de:5f:dc:f4:c2:
01:c5:7e:bc:a2:4d:bc:83:8d:23:26:f0:f2:f1:1d:
cb:e4:9b:3c:e8:db:be:27:5a:f2:9a:fa:3b:ad:96:
ac:4a:c8:d4:5e:22:bd:59:5e:cb:35:16:f6:54:a6:
c1:7b:8d:e1:b7:63:7d:c7:e4:54:43:c1:ba:7d:e0:
85:bb:2a:9b:5c:3e:25:59:6e:78:61:98:41:6c:6b:
76:75:96:16:39:48:42:fd:0c:41:cf:47:1c:8c:a1:
0a:b2:f1:24:c8:b2:c0:7e:07:95:8d:ed:e9:69:91:
35:b0:4f:fd:d8:ec:db:5a:ef:5f:e7:44:a2:4c:f2:
76:e1:10:e4:7e:e2:d5:07:65:85:4b:a7:a3:69:fa:
7e:0b:c1:31:46:8c:5a:4f:8e:00:4e:c2:d5:6c:6a:
51:8a:9e:27:b1:f6:1e:c6:f8:2d:95:f9:f3:e2:ad:
98:94:44:01:8f:f4:60:2a:ac:7e:d4:28:0c:3e:1a:
f7:39:bd:4e:4f:ab:84:13:c5:5c:8b:70:b6:0a:98:
4a:23:de:b4:38:e2:51:ff:07:39:24:5f:2d:b8:43:
66:5c:87:3c:66:9c:a6:ca:8d:a7:30:d4:67:fc:ae:
7f:18:0b:f8:60:61:85:6a:65:d6:f2:fe:b8:fe:e7:
e4:e8:ec:c4:5d:9a:dc:d9:fe:b4:df:30:71:81:50:
9c:e8:9a:30:89:e1:6d:6c:9a:22:f1:a8:eb:60:31:
80:1a:8f:3c:14:07:4c:e8:6d:8f:7d:07:d7:ba:ec:
ba:21:63:64:b3:a5:bc:03:a0:e4:c5:0d:94:d9:a3:
9a:af:e2:dd:bf:ac:56:2b:32:e8:be:c5:e6:11:16:
f1:90:7c:50:6a:82:a6:0b:0c:3e:3f:8e:eb:cf:2b:
51:8b:d7:02:6a:f3:8b:ae:93:2f:0c:e2:63:7f:ff:
f7:ab:e4:5d:1f:fa:9b:12:62:fe:8f:4b:90:5d:d2:
39:e4:b1:9b:71:80:36:0c:cc:b3:dd:de:21:19:80:
fe:42:b3:96:46:f4:fb:de:54:51:77:4e:82:d7:c0:
8a:bf:c9`;

const base64 = Buffer.from(modulus.replace(/:/g, ""), "hex").toString("base64");
console.log(base64);

But that gave me this value: AN7bRDh6rsj1a5WDh74c and I don't think that's correct.但这给了我这个值: AN7bRDh6rsj1a5WDh74c ,我认为这是不正确的。 So how to achieve that?那么如何实现呢?

Turn that modulus into a list of numbers first:首先将该模数转换为数字列表:

const list = modulus.split(`:`).map(v => parseInt(v, 16));

And now that you have an array of 8 bit clean numbers, you can trivially turn that into base64 by using the btoa (binary to ascii) function in the browser:现在您有了一个 8 位干净数字的数组,您可以通过在浏览器中使用btoa (二进制到 ascii)函数轻松地将其转换为 base64:

const byteSequence = list.map(v => String.fromCharCode(v)).join(``);
const encoded = btoa(byteSequence);

Or by using Buffer in Node:或者通过在节点中使用缓冲区:

const encoded = Buffer.from(byteSequence).toString('base64');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM