не могу преобразовать тип privateKey pem.Block в строку типа - PullRequest
0 голосов
/ 10 февраля 2019

Я хочу сгенерировать ssh-ключ, public и private и вернуть в виде строки, но я не знаю, как я могу преобразовать тип * pem.Block в строку.

это мой текущий код:

package main

import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    "encoding/asn1"
    "encoding/pem"
    "fmt"
    "bytes"
    "bufio"
)

func Keymaker() {
    reader := rand.Reader
    bitSize := 2048

    key, err := rsa.GenerateKey(reader, bitSize)
    if err != nil {
        //return nil, nil, err
    }

    publicKey := key.PublicKey

    var privateKey = &pem.Block{
        Type:  "PRIVATE KEY",
        Bytes: x509.MarshalPKCS1PrivateKey(key),
    }

    asn1Bytes, err := asn1.Marshal(publicKey)
    if err != nil {
        //return nil, nil, err
    }

    var pemkey = &pem.Block{
        Type:  "PUBLIC KEY",
        Bytes: asn1Bytes,
    }

    var PublicKeyRow bytes.Buffer

    err = pem.Encode(bufio.NewWriter(&PublicKeyRow), pemkey)

    fmt.Println("public_key : ", PublicKeyRow)
    fmt.Println("private_key : ", privateKey )

    return
}


func main() {
    Keymaker()

}

и это моя текущая ошибка:

# command-line-arguments
./dkim.go:46:38: cannot convert privateKey (type *pem.Block) to type string

Мне нужно в формате строки, потому что я хочу сохранить ключ в базе данных, как я могу преобразовать (тип * pem.Block) в тип строки?и как я могу преобразовать (введите bytes.Buffer) в строку типа?

1 Ответ

0 голосов
/ 10 февраля 2019

Ваш PublicKeyRow уже правильный io.Writer, в который вы хотите написать.Вам не нужно создавать еще один buffio.NewWriter(&PublicKeyRow).Таким образом, чтобы преобразовать pem.Block в строку, последние строки должны выглядеть следующим образом:

var PublicKeyRow bytes.Buffer

err = pem.Encode(&PublicKeyRow, pemkey)

fmt.Println("public_key : ", PublicKeyRow)
fmt.Println("public_key(string) : ", PublicKeyRow.String())
fmt.Println("private_key : ", privateKey )

Обновление Чтобы получить закрытый ключ, вы можете добавить еще один код

var PublicKeyRow bytes.Buffer
var PrivateKeyRow bytes.Buffer

err = pem.Encode(&PublicKeyRow, pemkey)
err = pem.Encode(&PrivateKeyRow, privateKey)

fmt.Println("public_key: ", PublicKeyRow.String())
fmt.Println("private_key : ", PrivateKeyRow.String() )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...