От ExpKey + Modkey до PEM - PullRequest
       89

От ExpKey + Modkey до PEM

0 голосов
/ 21 сентября 2018

У меня есть, например,

EXPKEY : 010001
MODKEY : 00A5AC1136D1CE663E37E9F40F36C84F208FF0BEDE08BEE53B83A7BF79A39EA86E13F82893ACE0FB877BAC2FCAFB931D8C6CAB1D7A343072EB0D3499D2538E5B8DDA346BE333293BD6BDC9949752BCFCDE94FE7F74E92EBA4EB22016CEB27D0B538F843DF76F31D3BB9ADD4CEE48F80BF8B6284B25AA53ED13B004EF2F110CBB3E5B3FA8DA77C89397E1E9AC7E0072793759C2145761517FCB4CD1878B7DB94D03764487DF4484FB154253161207CFABCD45321B4528B276FBD87847B12F5B27BD8EB1FE4C1C05C814D7E4E8DAD87FCF95B56A67C2EB045D05E758E268A29F18C8DCD9BBC43778F18544B42E5F73FB6C256EA8A2E9EE3F798A1873DFDF84403623

Что такое openssl или любая команда linux для получения открытого ключа в кодировке PEM

Спасибо

1 Ответ

0 голосов
/ 22 сентября 2018

Насколько я знаю, ни одна из openssl приложений или команд Linux не поддерживает то, что вы ищете.Одним из вариантов может быть использование модуля шифрования python .Установите с pip install cryptography, а затем используйте что-то вроде следующего:

import sys
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicNumbers
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends.openssl import backend

pubnums = RSAPublicNumbers(
    int(sys.argv[2], 16),
    int(sys.argv[1], 16)
)
pubkey = pubnums.public_key(backend)
pubkey_PEM = pubkey.public_bytes(
    encoding = serialization.Encoding.PEM,
    format = serialization.PublicFormat.PKCS1).decode('utf-8')
print(pubkey_PEM) # Remove the parenthesis for old versions of python

Тестирование сценария с вашими данными, предполагая, что он называется makePubPEM.py:

$ MODKEY=00A5AC1136D1CE663E37E9F40F36C84F208FF0BEDE08BEE53B83A7BF79A39EA86E13F82893ACE0FB877BAC2FCAFB931D8C6CAB1D7A343072EB0D3499D2538E5B8DDA346BE333293BD6BDC9949752BCFCDE94FE7F74E92EBA4EB22016CEB27D0B538F843DF76F31D3BB9ADD4CEE48F80BF8B6284B25AA53ED13B004EF2F110CBB3E5B3FA8DA77C89397E1E9AC7E0072793759C2145761517FCB4CD1878B7DB94D03764487DF4484FB154253161207CFABCD45321B4528B276FBD87847B12F5B27BD8EB1FE4C1C05C814D7E4E8DAD87FCF95B56A67C2EB045D05E758E268A29F18C8DCD9BBC43778F18544B42E5F73FB6C256EA8A2E9EE3F798A1873DFDF84403623
$ EXPKEY=010001
$ python makePubPEM.py ${MODKEY} ${EXPKEY}
-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEApawRNtHOZj436fQPNshPII/wvt4IvuU7g6e/eaOeqG4T+CiTrOD7
h3usL8r7kx2MbKsdejQwcusNNJnSU45bjdo0a+MzKTvWvcmUl1K8/N6U/n906S66
TrIgFs6yfQtTj4Q9928x07ua3UzuSPgL+LYoSyWqU+0TsATvLxEMuz5bP6jad8iT
l+HprH4Acnk3WcIUV2FRf8tM0YeLfblNA3ZEh99EhPsVQlMWEgfPq81FMhtFKLJ2
+9h4R7EvWye9jrH+TBwFyBTX5Oja2H/PlbVqZ8LrBF0F51jiaKKfGMjc2bvEN3jx
hUS0Ll9z+2wlbqii6e4/eYoYc9/fhEA2IwIBEQ==
-----END RSA PUBLIC KEY-----

Проверка результата:

$ openssl rsa -RSAPublicKey_in -text -noout -in <(./makePubPEM.py ${MODKEY} ${EXPKEY})
Public-Key: (2048 bit)

Modulus:
    00:a5:ac:11:36:d1:ce:66:3e:37:e9:f4:0f:36:c8:
    4f:20:8f:f0:be:de:08:be:e5:3b:83:a7:bf:79:a3:
    9e:a8:6e:13:f8:28:93:ac:e0:fb:87:7b:ac:2f:ca:
    fb:93:1d:8c:6c:ab:1d:7a:34:30:72:eb:0d:34:99:
    d2:53:8e:5b:8d:da:34:6b:e3:33:29:3b:d6:bd:c9:
    94:97:52:bc:fc:de:94:fe:7f:74:e9:2e:ba:4e:b2:
    20:16:ce:b2:7d:0b:53:8f:84:3d:f7:6f:31:d3:bb:
    9a:dd:4c:ee:48:f8:0b:f8:b6:28:4b:25:aa:53:ed:
    13:b0:04:ef:2f:11:0c:bb:3e:5b:3f:a8:da:77:c8:
    93:97:e1:e9:ac:7e:00:72:79:37:59:c2:14:57:61:
    51:7f:cb:4c:d1:87:8b:7d:b9:4d:03:76:44:87:df:
    44:84:fb:15:42:53:16:12:07:cf:ab:cd:45:32:1b:
    45:28:b2:76:fb:d8:78:47:b1:2f:5b:27:bd:8e:b1:
    fe:4c:1c:05:c8:14:d7:e4:e8:da:d8:7f:cf:95:b5:
    6a:67:c2:eb:04:5d:05:e7:58:e2:68:a2:9f:18:c8:
    dc:d9:bb:c4:37:78:f1:85:44:b4:2e:5f:73:fb:6c:
    25:6e:a8:a2:e9:ee:3f:79:8a:18:73:df:df:84:40:
    36:23
Exponent: 65537 (0x10001)
...