Функция x509.ParsePKCS1PrivateKey

Функция x509.ParsePKCS1PrivateKey предназначена для преобразования байтового среза, содержащего RSA-ключ в формате PKCS#1, в объект rsa.PrivateKey. Она принимает один параметр — байтовый срез с DER-кодированным ключом — и возвращает указатель на структуру rsa.PrivateKey или ошибку, если ключ поврежден или имеет неверный формат.

Синтаксис

gox509.ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, error)

Пример

Давайте распарсим приватный RSA-ключ из строки в формате PEM. Сначала декодируем PEM-блок, затем распарсим его содержимое с помощью функции x509.ParsePKCS1PrivateKey:

gopackage main

import (
  "crypto/rsa"
  "crypto/x509"
  "encoding/pem"
  "fmt"
  "log"
)

func main() {
  pemData := `-----BEGIN RSA PRIVATE KEY-----
  MIIEpAIBAAKCAQEAu1cHcT... (пример ключа)
  -----END RSA PRIVATE KEY-----`

  block, _ := pem.Decode([]byte(pemData))
  if block == nil {
    log.Fatal("failed to decode PEM block")
  }

  privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
  if err != nil {
    log.Fatal(err)
  }

  fmt.Printf("Parsed RSA key with %d bits", privateKey.N.BitLen())
}

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

go"Parsed RSA key with 2048 bits"

Пример

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

gopackage main

import (
  "crypto/x509"
  "fmt"
  "log"
)

func main() {
  invalidKey := []byte("invalid key data")

  privateKey, err := x509.ParsePKCS1PrivateKey(invalidKey)
  if err != nil {
    log.Printf("Error parsing key: %v", err)
    return
  }

  fmt.Printf("Key parsed successfully: %v", privateKey)
}

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

go"Error parsing key: asn1: syntax error: data truncated"

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

  • функцию x509.MarshalPKCS1PrivateKey,
    которая выполняет обратное преобразование ключа в формат PKCS#1
  • функцию x509.ParseCertificate,
    которая парсит X.509-сертификат из DER-формата
  • функцию x509.ParsePKIXPublicKey,
    которая парсит публичный ключ в формате PKIX
  • функцию pem.Decode,
    которая декодирует PEM-данные для получения DER-формата