RSA 공개 키 생성

package main

import (
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"encoding/pem"
	"flag"
	"fmt"
	"os"
)

var outFilePath = flag.String("outpath", "./", "Generate rsa file save path")

func main() {
	flag.Parse()
	if err := genRsaKey(1, *outFilePath); err != nil {
		fmt.Println(" !")
	} else {
		fmt.Println(" !")
	}
}

func genRsaKey(bits int, filePath string) error {
	// 
	if bits > 1024 {
		bits = 2048
	} else {
		bits = 1024
	}

	// 
	_, err := os.Stat(filePath)
	if err != nil {
		os.Mkdir(filePath, 0777)
	}

	//  
	privateKey, err := rsa.GenerateKey(rand.Reader, bits)
	if err != nil {
		return err
	}
	derStream := x509.MarshalPKCS1PrivateKey(privateKey)
	block := &pem.Block{
		Type:  "RSA PRIVATE KEY",
		Bytes: derStream,
	}
	file, err := os.Create(fmt.Sprintf("%s/private.pem", filePath))
	if err != nil {
		return err
	}

	err = pem.Encode(file, block)
	if err != nil {
		return err
	}
	//  
	publicKey := &privateKey.PublicKey
	derPkix, err := x509.MarshalPKIXPublicKey(publicKey)
	if err != nil {
		return err
	}
	block = &pem.Block{
		Type:  "PUBLIC KEY",
		Bytes: derPkix,
	}
	file, err = os.Create(fmt.Sprintf("%s/public.pem", filePath))
	if err != nil {
		return err
	}
	// fmt.Println(" :", base64.StdEncoding.EncodeToString(block.Bytes))
	err = pem.Encode(file, block)
	if err != nil {
		return err
	}
	return nil
}

좋은 웹페이지 즐겨찾기