Функция x509.MarshalPKIXPublicKey

Функция x509.MarshalPKIXPublicKey преобразует публичный ключ в его сериализованное представление в формате PKIX, ASN.1 DER. В качестве параметра она принимает интерфейс any, который должен содержать публичный ключ одного из поддерживаемых типов: *rsa.PublicKey, *ecdsa.PublicKey, ed25519.PublicKey. Функция возвращает байтовый срез с закодированными данными и ошибку, если тип ключа не поддерживается или ключ поврежден.

Синтаксис

gox509.MarshalPKIXPublicKey(pub any) ([]byte, error)

Пример

Давайте сериализуем публичный ключ RSA в формате PKIX:

gopackage 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]) + "...")
}

Результат выполнения кода:

go"3082010a0282010100a4c8e5f9..."

Пример

Давайте сериализуем публичный ключ ECDSA в формате PKIX:

gopackage 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]) + "...")
}

Результат выполнения кода:

go"3059301306072a8648ce3d020106082a..."

Пример

Давайте попробуем сериализовать неподдерживаемый тип ключа:

gopackage 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))
}

Результат выполнения кода:

go"Error: x509: unsupported public key type: string"

Смотрите также

  • функцию x509.ParsePKIXPublicKey,
    которая выполняет обратное преобразование - парсинг PKIX-данных в публичный ключ
  • функцию x509.MarshalPKCS1PrivateKey,
    которая сериализует приватный ключ RSA в формате PKCS1
  • функцию x509.ParsePKCS1PrivateKey,
    которая парсит приватный ключ RSA из формата PKCS1
  • функцию x509.CreateCertificate,
    которая создает новый X.509 сертификат на основе публичного ключа