Как разобрать ключ publi c с N = и E = in golang? - PullRequest
3 голосов
/ 28 апреля 2020

У меня есть ключ, сгенерированный mbedtls RSA publi c, созданный на встроенном устройстве, который мне нужно проанализировать в Golang. Мой ключ не в формате pem, он содержит только модуль и экспоненту и выглядит следующим образом:

N = 9C99AB1DC1462220A628D19BB6C6627FDCCC208FD9F93722F44515F5086F3312D3EFE256A11789F1F7F9A114B879A2DE0005FAE99A68321DD821CE589D1F6E0D
E = 010001

Я уверен, что мог бы разобрать это сам, но так как вы никогда не должны реализовывать свою собственную криптографию методы и Golang имеет очень полный набор функций, что я могу сделать, чтобы создать rsa.PublicKey из этого?

Я мог бы сгенерировать ключ PEM, но это кажется большим отходы

Спасибо

1 Ответ

6 голосов
/ 28 апреля 2020

Нет ничего плохого в разборе вашего собственного ввода, я бы не назвал это "переопределением крипто-примитивов".

Чтобы получить ключ publi c, просто проанализируйте модуль в большое целое число:

bigN.SetString("9C99AB1DC1462220A628D...", 16)

Затем создайте свой собственный rsa.PublicKey.

Полный пример на детской площадке :

N := "9C99AB1DC1462220A628D19BB6C6627FDCCC208FD9F93722F44515F5086F3312D3EFE256A11789F1F7F9A114B879A2DE0005FAE99A68321DD821CE589D1F6E0D"
E := 010001
bigN := new(big.Int)
_, ok := bigN.SetString(N, 16)
if !ok {
    panic("failed to parse")
}
pub := rsa.PublicKey{
    N: bigN,
    E: E,
}
fmt.Println(pub)
...