在go语言中如何加载GOB和PEM文件的流程步骤

2023-06-01 00:00:00 步骤 加载 流程

私钥和公钥加密系统已经实现了大量的安全实现,如加密电子邮件(PGP)、ssh登录等。

下面看看如何加载前一个关于保存私钥和公钥的教程中创建的密钥和pem文件:

https://www.zongscan.com/demo333/96009.html


示例代码:

loadrsakey.go


 package main
 import (
   "fmt"
   "os"
   "bufio"
   "crypto/rsa"
   "encoding/pem"
   "encoding/gob"
 )
 func main () {
   // Load Private Key
   privatekeyfile, err := os.Open("private.key")
   if err != nil {
     fmt.Println(err)
     os.Exit(1)
   }
   decoder := gob.NewDecoder(privatekeyfile)
   var privatekey rsa.PrivateKey
   err = decoder.Decode(&privatekey)
   if err != nil {
      fmt.Println(err.Error())
      os.Exit(1)
   }
   privatekeyfile.Close()
   fmt.Printf("Private Key : \n%x\n", privatekey)
   // Public Key
   publickeyfile, err := os.Open("public.key")
   if err != nil {
     fmt.Println(err)
     os.Exit(1)
   }
   decoder = gob.NewDecoder(publickeyfile)
   var publickey rsa.PublicKey
   err = decoder.Decode(&publickey)
   if err != nil {
      fmt.Println(err)
      os.Exit(1)
   }
   publickeyfile.Close()
   fmt.Printf("Public key : \n%x\n", publickey)
   // Load PEM
   pemfile, err := os.Open("private.pem")
   if err != nil {
     fmt.Println(err)
     os.Exit(1)
   }
   // need to convert pemfile to []byte for decoding
   pemfileinfo, _ := pemfile.Stat()
   var size int64 = pemfileinfo.Size()
   pembytes := make([]byte,size)
   // read pemfile content into pembytes
   buffer := bufio.NewReader(pemfile)
   _, err = buffer.Read(pembytes)
   // proper decoding now
   data, _ := pem.Decode([]byte(pembytes))
   pemfile.Close()
   fmt.Printf("PEM Type :\n%s\n", data.Type)
   fmt.Printf("PEM Headers :\n%s\n", data.Headers)
   fmt.Printf("PEM Bytes :\n%x\n", string(data.Bytes))   
 }


输出:

Private Key :
{{bdfc7d7......b86ac5dac2 []}}
Public key :
{bdfc7d76..... 10001}
PEM Type :
RSA PRIVATE KEY
PEM Headers :
map[]
PEM Bytes :
3082025c02....ac5dac2

相关文章