如何在Golang中创建与OpenSSL相同的.der文件?

huangapple go评论120阅读模式
英文:

How to create .der file in golang same as openssl do

问题

"openssl rsa -in prevate.pem -outform DER -pubout -out public.der" 的中文翻译是:将 prevate.pem 文件转换为 DER 格式的公钥,并将结果保存为 public.der。

英文:

"openssl rsa -in prevate.pem -outform DER -pubout -out public.der"

答案1

得分: 3

你可以考虑使用google/trillian这样的库,它包含了一个MustMarshalPublicPEMToDER(keyPEM string) []byte函数。

// MustMarshalPublicPEMToDER将一个PEM编码的公钥读取并以DER编码返回。
// 如果发生错误,它会引发panic。
func MustMarshalPublicPEMToDER(keyPEM string) []byte {
	block, _ := pem.Decode([]byte(keyPEM))
	key, err := x509.ParsePKIXPublicKey(block.Bytes)
	if err != nil {
		panic(err)
	}

	keyDER, err := x509.MarshalPKIXPublicKey(key)
	if err != nil {
		panic(err)
	}
	return keyDER
}

正如这个函数的注释所示,它读取一个PEM编码的公钥。

正如Topaco所指出的,如果要读取一个私有的PKCS#8 PEM编码的密钥,你需要使用crypto/x509#ParsePKCS8PrivateKey。编组部分不会改变。

英文:

You might consider a library like google/trillian, which does include a MustMarshalPublicPEMToDER(keyPEM string) []byte function.

// MustMarshalPublicPEMToDER reads a PEM-encoded public key and returns it in DER encoding.
// If an error occurs, it panics.
func MustMarshalPublicPEMToDER(keyPEM string) []byte {
	block, _ := pem.Decode([]byte(keyPEM))
	key, err := x509.ParsePKIXPublicKey(block.Bytes)
	if err != nil {
		panic(err)
	}

	keyDER, err := x509.MarshalPKIXPublicKey(key)
	if err != nil {
		panic(err)
	}
	return keyDER
}

As the comment of this function shows, this reads a PEM-encoded public key.

As noted by Topaco, you would need crypto/x509#ParsePKCS8PrivateKey in order to read a private PKCS#8 PEM encoded key.
The marshal part does not change.

huangapple
  • 本文由 发表于 2021年12月6日 12:32:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/70240909.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定