Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main8 ]/ ~5 D  i( H& h, I) I; ~+ ~( {
import (' i4 t) V" q8 K+ H/ K. N' y0 Q
        "crypto/rand"5 v+ Q/ y% J( z0 P( e9 R. o# l
        "crypto/rsa"
5 F2 G$ W% n/ i7 m/ i8 u6 K) `        "crypto/x509"& V) [/ ]+ P1 Z; t/ M" z& ^
        "encoding/pem"+ w$ F, J# G! N# j5 S% s3 B
        "flag"$ ?; \" [& ]) ^' n
        "log"
, c/ G$ e$ j" R/ h        "os") S- t' s$ k3 h, b8 G- d# Q2 X4 ?
)
2 R4 k& P6 o: T. t) ~) G3 I- h6 jfunc main()  {
9 Z* N5 [# O3 W/ R$ _        if err := GenerateRSAKey(); err != nil {
) D7 r- C9 ?9 d/ q                log.Fatal("密钥生成失败")$ I+ C8 l3 P: |2 G, j$ D
        }
$ S9 O8 n$ \, j0 o7 u) ]; r7 `        log.Println("密钥生成成功")
$ N3 ~: _# R) N: D}4 n! a2 `# c5 ]# O2 `- r
func GenerateRSAKey() error {
) E1 q* M2 j1 X        //1  RSA生成私钥文件步骤
) S" d( Z. c5 Y) B, b        //--1生成RSA私钥对  P- g/ @" R& j8 J! A& S
        var bits int
- Z8 z  j; ^+ X& `9 b" I8 f  T        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
! D5 T8 B5 c8 o0 ^' f2 Q        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)2 G* \  ]. J' m: k7 p8 X
        if err != nil {
' E0 f1 H7 g, }                return err) k, D% @9 p6 ~3 h1 T
        }& Z3 m  Y& V& U4 `! e+ q
        //--2.将私钥对象转换为DER编码形式
% f% L- D' _4 ~1 ?0 K        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)" F. I) P5 t+ H0 E3 Y; d% M
        //--3.创建私钥pem文件+ g& }  {( D, w7 a7 g5 P1 s
        file,err := os.Create("./files/private.pem")1 x/ {- W( U- d
        if err != nil {% Z( D7 M7 L7 D0 n0 b8 A4 \4 r" n
                return err
$ c5 k5 t! U+ s3 n4 n( @9 g/ T        }( r% J: J# e) b) I# e4 H" z
        //--4.对私钥信息进行编码,写入到私钥文件中) S. |6 h5 a, V0 K' I/ N/ \
        block := &pem.Block{
1 K4 F0 f4 K  y+ F- P                Type:    "RSA PRIVATE KEY",' g& v* e9 p+ x2 T! K! x
                Bytes:   derPribateKey,
& ^3 {0 \: i  b$ J6 F        }8 H( j" F* Z% `  i! c2 X
        err = pem.Encode(file,block)
. ?9 y8 c! f7 Q! z/ i3 E        if err != nil {" E% I8 L" O- {0 }. t# H- y
                return  err
( J% }6 s. }' j0 [4 p: f0 S. d        }
9 R, `/ V" ]# T) _/ u/ m        //2 RSA生成公钥文件的核心步骤
# a, t  ]8 ]- ~, I        //--1.生成公钥对象
0 g( ^4 [$ U  R5 z% i' f        publickey := &privatekey.PublicKey
+ g- \3 _! ]; Z        //--2.将公钥对象转换为DER编码形式
9 }% v, `# o7 ^4 ^# t7 a! F# R        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey). b/ v9 {4 X" E7 ?7 E- U: o! J
        if err != nil {. [$ C7 K3 l6 Z8 R4 n
                return  err
, a( k" O# a, g+ f$ l* V7 x        }7 ]7 N' z9 g% r3 r% c& n
        //--3.创建公钥pem文件
$ l5 _6 t# `1 J5 y        file,err = os.Create("./files/public.pem")( [4 _3 ~( b7 F* f+ V' s+ }( S
        if err != nil {
- q: K4 |* s: E+ n                return  err
" d2 K$ o" E9 }0 y1 T1 @1 V        }
  i( D/ h! Z, L/ m% ^        //--4.对公钥信息进行编码,写入公钥文件中
9 c$ N* |% l; e% H+ s' G5 {1 ^# G- ^        block = &pem.Block{
- E" D' ~$ J% a' Q$ ?" i' N                Type:    "PUBLIC KEY",- H( z( P9 s6 K' o) r
                Bytes:   derpublicKey,
0 u: l* F- o* K2 E, l4 `        }
5 r6 h+ F$ o5 D8 N        err = pem.Encode(file,block)6 t; i8 }& v1 o
        if err != nil {
: c+ V# F9 {3 V5 f; }                return  err. e' G( n1 z" Y5 ~
        }: {5 ]! w8 m8 z. Q5 O# Q, M: A
        return nil
3 D! t6 p; `( a# d: Y# R! C}
5 Z0 ?' f! T/ S& V执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

吃瓜围观小分队 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    3