Функция pem.Encode
Функция pem.Encode кодирует переданные данные в формат PEM,
который широко используется для представления криптографических
ключей, сертификатов и других данных в текстовом виде. В первый
параметр функция принимает объект io.Writer, куда будет
записан результат, во второй параметр - структуру
pem.Block, содержащую тип заголовка и байтовые данные
для кодирования.
Синтаксис
pem.Encode(w io.Writer, b *pem.Block) error
Пример
Давайте закодируем простые байтовые данные в формат PEM:
package main
import (
"bytes"
"encoding/pem"
"fmt"
)
func main() {
data := []byte("Hello, PEM!")
block := &pem.Block{
Type: "MESSAGE",
Bytes: data,
}
buf := new(bytes.Buffer)
err := pem.Encode(buf, block)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
}
Результат выполнения кода:
"-----BEGIN MESSAGE-----\nSGVsbG8sIFBFTSE=\n-----END MESSAGE-----\n"
Пример
Давайте закодируем данные с использованием нескольких блоков PEM:
package main
import (
"bytes"
"encoding/pem"
"fmt"
)
func main() {
data1 := []byte("First block")
data2 := []byte("Second block")
block1 := &pem.Block{
Type: "BLOCK1",
Bytes: data1,
}
block2 := &pem.Block{
Type: "BLOCK2",
Bytes: data2,
}
buf := new(bytes.Buffer)
err := pem.Encode(buf, block1)
if err != nil {
fmt.Println(err)
return
}
err = pem.Encode(buf, block2)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
}
Результат выполнения кода:
"-----BEGIN BLOCK1-----\nRmlyc3QgYmxvY2s=\n-----END BLOCK1-----\n-----BEGIN BLOCK2-----\nU2Vjb25kIGJsb2Nr\n-----END BLOCK2-----\n"
Пример
Давайте закодируем данные с использованием пользовательских заголовков:
package main
import (
"bytes"
"encoding/pem"
"fmt"
)
func main() {
data := []byte("Custom headers data")
block := &pem.Block{
Type: "CUSTOM",
Headers: map[string]string{
"Version": "1.0",
"Author": "Developer",
},
Bytes: data,
}
buf := new(bytes.Buffer)
err := pem.Encode(buf, block)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(buf.String())
}
Результат выполнения кода:
"-----BEGIN CUSTOM-----\nVersion: 1.0\nAuthor: Developer\n\nQ3VzdG9tIGhlYWRlcnMgZGF0YQ==\n-----END CUSTOM-----\n"
Смотрите также
-
функцию
pem.Decode,
которая декодирует PEM-данные обратно в блок -
функцию
pem.EncodeToMemory,
которая кодирует данные в PEM и возвращает их в виде среза байтов -
функцию
x509.MarshalPKCS1PrivateKey,
которая преобразует приватный ключ в PKCS1 формат -
пакет
crypto/x509,
который содержит функции для работы с сертификатами и ключами