Функция x509.MarshalPKIXPublicKey
Функция x509.MarshalPKIXPublicKey преобразует публичный ключ
в его сериализованное представление в формате PKIX, ASN.1 DER.
В качестве параметра она принимает интерфейс any, который должен
содержать публичный ключ одного из поддерживаемых типов: *rsa.PublicKey,
*ecdsa.PublicKey, ed25519.PublicKey.
Функция возвращает байтовый срез с закодированными данными и ошибку,
если тип ключа не поддерживается или ключ поврежден.
Синтаксис
x509.MarshalPKIXPublicKey(pub any) ([]byte, error)
Пример
Давайте сериализуем публичный ключ RSA в формате PKIX:
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/hex"
"fmt"
)
func main() {
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
fmt.Println(err)
return
}
publicKey := &privateKey.PublicKey
pkixData, err := x509.MarshalPKIXPublicKey(publicKey)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(hex.EncodeToString(pkixData[:32]) + "...")
}
Результат выполнения кода:
"3082010a0282010100a4c8e5f9..."
Пример
Давайте сериализуем публичный ключ ECDSA в формате PKIX:
package main
import (
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"crypto/x509"
"encoding/hex"
"fmt"
)
func main() {
privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
if err != nil {
fmt.Println(err)
return
}
publicKey := &privateKey.PublicKey
pkixData, err := x509.MarshalPKIXPublicKey(publicKey)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(hex.EncodeToString(pkixData[:32]) + "...")
}
Результат выполнения кода:
"3059301306072a8648ce3d020106082a..."
Пример
Давайте попробуем сериализовать неподдерживаемый тип ключа:
package main
import (
"crypto/x509"
"fmt"
)
func main() {
invalidKey := "not a key"
pkixData, err := x509.MarshalPKIXPublicKey(invalidKey)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(hex.EncodeToString(pkixData))
}
Результат выполнения кода:
"Error: x509: unsupported public key type: string"
Смотрите также
-
функцию
x509.ParsePKIXPublicKey,
которая выполняет обратное преобразование - парсинг PKIX-данных в публичный ключ -
функцию
x509.MarshalPKCS1PrivateKey,
которая сериализует приватный ключ RSA в формате PKCS1 -
функцию
x509.ParsePKCS1PrivateKey,
которая парсит приватный ключ RSA из формата PKCS1 -
функцию
x509.CreateCertificate,
которая создает новый X.509 сертификат на основе публичного ключа