Функция pem.EncodeToMemory

Функция pem.EncodeToMemory принимает на вход структуру типа pem.Block и возвращает срез байтов, содержащий данные в формате PEM (Privacy-Enhanced Mail). В структуру pem.Block нужно передать тип данных (например, "CERTIFICATE" или "RSA PRIVATE KEY") и сами данные в виде среза байтов. Функция не требует указания файла или потока вывода, а сразу возвращает готовый PEM-блок в памяти.

Синтаксис

gopem.EncodeToMemory(block *pem.Block) []byte

Пример

Давайте закодируем простой сертификат в формате PEM:

gopackage main

import (
  "crypto/pem"
  "encoding/base64"
  "fmt"
)

func main() {
  // Демонстрационные данные сертификата
  certData := []byte("-----BEGIN CERTIFICATE-----\nMII...\n-----END CERTIFICATE-----")

  // Декодируем DER-данные (для примера используем base64)
  decoded, _ := base64.StdEncoding.DecodeString("MII...")

  // Создаем блок PEM
  block := &pem.Block{
    Type:  "CERTIFICATE",
    Bytes: decoded,
  }

  // Кодируем в PEM
  pemBytes := pem.EncodeToMemory(block)
  fmt.Println(string(pemBytes))
}

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

go"-----BEGIN CERTIFICATE-----\nMII...\n-----END CERTIFICATE-----\n"

Пример

Давайте закодируем закрытый ключ RSA в формате PEM:

gopackage main

import (
  "crypto/pem"
  "crypto/rand"
  "crypto/rsa"
  "crypto/x509"
  "fmt"
)

func main() {
  // Генерируем RSA ключ
  privateKey, _ := rsa.GenerateKey(rand.Reader, 2048)

  // Преобразуем в DER-формат
  privateKeyBytes := x509.MarshalPKCS1PrivateKey(privateKey)

  // Создаем блок PEM
  block := &pem.Block{
    Type:  "RSA PRIVATE KEY",
    Bytes: privateKeyBytes,
  }

  // Кодируем в PEM
  pemBytes := pem.EncodeToMemory(block)
  fmt.Println(string(pemBytes))
}

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

go"-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEA...\n-----END RSA PRIVATE KEY-----\n"

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

  • функцию pem.Decode,
    которая выполняет обратное преобразование и декодирует PEM-данные
  • функцию pem.Encode,
    которая выполняет кодирование в PEM с записью в поток вывода
  • пакет encoding/pem,
    который предоставляет все функции для работы с PEM-форматом
  • пакет crypto/x509,
    который используется для работы с сертификатами и ключами