温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

golang中怎么生成密钥对

发布时间:2021-07-06 15:08:13 阅读:931 作者:Leah 栏目:大数据
GO开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章将为大家详细讲解有关golang中怎么生成密钥对,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

利用golang的官方包生成密钥对.

生成密钥对方法:

// generateRsaKey 密钥func generateRsaKey(bits int) (err error) {   var (      file   *os.File      priKey *rsa.PrivateKey      pubKey *rsa.PublicKey   )   // 获取私钥   if priKey, err = rsa.GenerateKey(rand.Reader, bits); err != nil {      return   }   // 将私钥转换为ASN.1 DER编码形式。   derStream := x509.MarshalPKCS1PrivateKey(priKey)   // 私钥参数   block := &pem.Block{      Type:    "privateKey",      Headers: map[string]string{"test": "testKey"},      Bytes:   derStream,   }   // 创建private.key文件   if file, err = os.Create("private.key"); err != nil {      return   }   // 在文件里面写入数据   if err = pem.Encode(file, block); err != nil {      return   }   // 获取公钥   pubKey = &priKey.PublicKey   if _derPkix, _err := x509.MarshalPKIXPublicKey(pubKey); _err != nil {      err = _err      return   } else {      block = &pem.Block{         Type:    "publicKey",         Headers: map[string]string{"test": "testKey"},         Bytes:   _derPkix,      }   }   // 创建公钥文件   if file, err = os.Create("public.key"); err != nil {      return   }   // 写入数据   if err = pem.Encode(file, block); err != nil {      return   }   return}

解析私钥获取其长度:

// getPrivateKeyLen 获取私钥长度func getPrivateKeyLen(private []byte) (ret int, err error) {   block, _ := pem.Decode(private)   var (      data *rsa.PrivateKey   )   if data, err = x509.ParsePKCS1PrivateKey(block.Bytes); err != nil {      return   }   ret = data.N.BitLen()   return}

解析公钥获取长度:

// getPublicKeyLen 获取公钥长度func getPublicKeyLen(public []byte) (ret int, err error) {   var (      block *pem.Block      data  interface{}   )   // 解码   block, _ = pem.Decode(public)   // 解析出数据   if data, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil {      return   }   // 分析数据   switch v := data.(type) {   case *rsa.PublicKey:      ret = v.N.BitLen()   default:      err = errors.New("data type is not rsa.PublicKey")   }   return}

main函数:

导入的包: 

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

   

func main() {   var (      bits           int      err            error      pubKey, priKey []byte      n              int   )   flag.IntVar(&bits, "b", 1024, "密钥长度,默认为1024位")   flag.Parse()   // 生成密钥对   if err = generateRsaKey(bits); err != nil {      panic(err)   }   if priKey, err = ioutil.ReadFile("private.pem"); err != nil {      return   }   if pubKey, err = ioutil.ReadFile("public.pem"); err != nil {      return   }   // 获取长度   if n, err = getPrivateKeyLen(priKey); err == nil {      fmt.Printf("private key len is %d\n", n)   } else {      panic(err)   }   // 获取长度   if n, err = getPublicKeyLen(pubKey); err == nil {      fmt.Printf("public key len is %d\n", n)   } else {      panic(err)   }}

关于golang中怎么生成密钥对就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/olongfen/blog/4467253

AI

开发者交流群×