Функция x509.ParsePKCS1PrivateKey
Функция x509.ParsePKCS1PrivateKey предназначена для
преобразования байтового среза, содержащего RSA-ключ в формате
PKCS#1, в объект rsa.PrivateKey. Она принимает один
параметр — байтовый срез с DER-кодированным ключом — и
возвращает указатель на структуру rsa.PrivateKey
или ошибку, если ключ поврежден или имеет неверный формат.
Синтаксис
x509.ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, error)
Пример
Давайте распарсим приватный RSA-ключ из строки в формате PEM.
Сначала декодируем PEM-блок, затем распарсим его содержимое
с помощью функции x509.ParsePKCS1PrivateKey:
package 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())
}
Результат выполнения кода:
"Parsed RSA key with 2048 bits"
Пример
Давайте попробуем распарсить неверные данные и обработаем возвращенную ошибку:
package 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)
}
Результат выполнения кода:
"Error parsing key: asn1: syntax error: data truncated"
Смотрите также
-
функцию
x509.MarshalPKCS1PrivateKey,
которая выполняет обратное преобразование ключа в формат PKCS#1 -
функцию
x509.ParseCertificate,
которая парсит X.509-сертификат из DER-формата -
функцию
x509.ParsePKIXPublicKey,
которая парсит публичный ключ в формате PKIX -
функцию
pem.Decode,
которая декодирует PEM-данные для получения DER-формата