如何在golang中解析N=和E=的公钥?

问题描述 投票:3回答:1

我有一个 mbedtls产生的 RSA公钥,在嵌入式设备上创建,我需要在Golang中解析。我的密钥不是pem格式,只包含模数和指数,看起来像这样。

N = 9C99AB1DC1462220A628D19BB6C6627FDCCC208FD9F93722F44515F5086F3312D3EFE256A11789F1F7F9A114B879A2DE0005FAE99A68321DD821CE589D1F6E0D
E = 010001

我相信我可以自己解析这个 但既然你不应该实现自己的加密方法 而Golang有一套非常完整的功能,我怎么做才能创建一个 rsa.PublicKey 从这个?

我可以生成一个PEM密钥,但这似乎是一个很大的浪费。

谢谢你了

go cryptography rsa public-key mbedtls
1个回答
6
投票

解析你自己的输入并没有错,我不会把这称为 "重新实现加密基元"。

要想获得公钥,只需将模数解析成一个大整数即可。

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)
© www.soinside.com 2019 - 2024. All rights reserved.