Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main+ a/ e( s  a) s9 U
import (( d0 Q2 T& p5 ?, m
        "crypto/rand"
& \9 Q% {4 O& }5 A5 v! R; g        "crypto/rsa"
/ O5 l, i8 h( C& A9 l( W7 T1 L        "crypto/x509"( j$ o- G' x! x) e+ o, p
        "encoding/pem": O* S% k) b5 v& b+ Q, O
        "flag"' Q% n( Y8 f1 x3 I$ U9 s
        "log"! F/ s& T% g  g# r7 ?$ ~$ l1 [
        "os"
" v/ P: X$ O* I1 N; g)6 k3 }8 _* P7 N  T1 z+ {( F
func main()  {
! p# N8 ?) x9 w, b- E        if err := GenerateRSAKey(); err != nil {
/ g0 J) x& ^- L8 l                log.Fatal("密钥生成失败")
8 x8 n" S9 j  V$ h  H        }
9 f0 Z+ q1 O) M' o        log.Println("密钥生成成功")" n% [- N4 X6 a1 j- U* [8 V( j
}! D: s/ E. _/ s6 y
func GenerateRSAKey() error {
+ P  J# {! d) X: v& m6 z  }        //1  RSA生成私钥文件步骤1 U- k) M' O2 Y8 G. R
        //--1生成RSA私钥对. H+ O* B1 g5 \1 W, C4 g* V2 n- B: D
        var bits int, u: }- o5 M, H2 N+ p
        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
0 o3 l0 j  H- W3 i& l8 n5 i. s        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
3 S% G% @, A) J3 h) `8 g# W        if err != nil {1 h5 J* s: F  Q  d
                return err
* F7 t1 f9 q' @2 M  l        }
# i. ?, z4 t9 w  i, l4 v        //--2.将私钥对象转换为DER编码形式
! z7 Y+ ~  m* A  r& x' q$ y        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)! _( ?6 S1 G* |/ ^" w, Z( J
        //--3.创建私钥pem文件
/ O. a7 S0 L8 }        file,err := os.Create("./files/private.pem")
4 p6 G% w! p- V/ I* R2 V0 {6 W        if err != nil {7 o& g2 }& L, T3 y$ `( K- M' K, f
                return err
. p  e  ]! S8 D. A        }5 i  V# Q2 p# [3 E. Q
        //--4.对私钥信息进行编码,写入到私钥文件中# b% [) s0 p. b$ p' V. F
        block := &pem.Block{( B8 `  P: }/ D2 ~& c! m1 O
                Type:    "RSA PRIVATE KEY",' q( M- L: L( ^) R! S' B' q
                Bytes:   derPribateKey,' O  F/ E% b& y+ T: W
        }4 K, G, W+ z& L5 P6 u7 P1 |
        err = pem.Encode(file,block)
# F8 H0 F$ ]- _  U) x        if err != nil {6 |3 _, C' ~0 |4 \* w3 _. w
                return  err
+ s2 Z  E9 W- T1 k" a- p0 \' m        }
3 A' p8 o0 n4 G7 e* ?1 a1 O) N        //2 RSA生成公钥文件的核心步骤
( T: m$ ?( j( C9 k& V7 }6 e        //--1.生成公钥对象: j7 c. P2 j+ K! Q5 [' R) C. O9 l
        publickey := &privatekey.PublicKey- y; e2 `  M- c  U6 K. e
        //--2.将公钥对象转换为DER编码形式
7 t/ N- X  c6 S, }) u        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)* H% r8 C# }( r6 s" ~/ Y
        if err != nil {. }; J: Z# Z' x( A* m. b, Y
                return  err
& f# G7 I- [; `) \& i        }/ `+ e8 N* |" ~; R
        //--3.创建公钥pem文件) A7 Y6 V2 i. {) r- `0 [. X( E% n
        file,err = os.Create("./files/public.pem")4 M7 I, g" M. ^' m1 E) P
        if err != nil {2 P  L+ j# Y/ Q- w( D6 T
                return  err
) P2 m- b( `9 x. {$ G& |9 _6 G        }
2 V1 f  c* ]3 Q        //--4.对公钥信息进行编码,写入公钥文件中9 H! c6 N* L# s& d
        block = &pem.Block{) e0 H9 s+ [7 S
                Type:    "PUBLIC KEY",) a% E6 ~" F" d
                Bytes:   derpublicKey,, [* F; b) Y7 q2 n) b! D. k6 Z" |
        }6 k7 D' d$ e" x
        err = pem.Encode(file,block)
6 j0 m& S  T% K: h$ k/ o        if err != nil {0 n3 V0 H$ b5 b8 j
                return  err! A7 O% K" z; z, h- V
        }
2 V& e! F) s% A( r" Z/ S        return nil- z2 M8 ]* {8 I6 a( M9 }1 O
}; z) K  s' Q3 s8 `
执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3