如何在 golang 中用 N= 和 E= 解析 public 键?

How to parse public key with N= and E= in golang?

我有一个 mbedtls-generated RSA public 密钥,它是在我需要在 Golang 中解析的嵌入式设备上创建的。我的密钥不是 pem 格式,只包含模数和指数,如下所示:

N = 9C99AB1DC1462220A628D19BB6C6627FDCCC208FD9F93722F44515F5086F3312D3EFE256A11789F1F7F9A114B879A2DE0005FAE99A68321DD821CE589D1F6E0D
E = 010001

我确定我可以自己解析它,但是由于您永远不应该实现自己的加密方法并且 Golang 拥有一套非常完整的功能,我可以做些什么来创建一个 rsa.PublicKey从这个?

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

谢谢

解析你自己的输入没有错,我不会称之为"reimplementing crypto primitives"。

要获得public键,只需将模数解析为一个大整数:

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

然后创建您自己的 rsa.PublicKey

playground 中的完整示例:

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)