Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main& @. W5 ?" H/ ^, f
import (# W0 \7 q3 _1 B: _% [
        "crypto/rand"- c/ s% R4 F6 [2 ]$ P7 D, H
        "crypto/rsa"9 ?3 m) b/ K. S, u# r$ _9 w
        "crypto/x509"
% q0 l6 Y- A* E$ ?- M        "encoding/pem"* _( ~: i: e4 m0 n6 K8 s1 a) W
        "flag"0 o1 u/ K8 }/ g9 U  Q" q. g$ Y
        "log"3 ?8 S) z' h2 E# i2 |
        "os"
4 ?9 {- D8 k* P# l4 o2 ^); [( N! `5 ^/ m
func main()  {: d8 u& x4 ?7 n
        if err := GenerateRSAKey(); err != nil {! E; K! ~8 m6 m. C+ `+ w. J! w
                log.Fatal("密钥生成失败")2 M  G! F) j' l. X5 h- y
        }$ ]  p9 g0 x; U, S4 i
        log.Println("密钥生成成功")
/ c1 `) F) @, t, _: f6 T}9 f" Y( T1 G+ j4 N+ y
func GenerateRSAKey() error {
. H, s- {% Y2 L6 R# M' _) w        //1  RSA生成私钥文件步骤
- P1 D: X4 D; f0 L4 r, P7 X/ ~        //--1生成RSA私钥对6 |6 b9 `/ e) a5 C
        var bits int
5 C# y) [3 c' H+ l- S, j6 S* q        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")/ Y8 e* E. k+ ?3 u" U, R" i* _  K
        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)# q6 F) P$ k+ k4 v  W( F
        if err != nil {
$ ]& L. ^3 w3 w7 T/ j                return err
; ^" k( W7 M  p& E        }1 j* q7 _) a' Q! B- s9 h
        //--2.将私钥对象转换为DER编码形式
$ J( R. u& D0 Q4 k  P, Q        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)
( T; d; P6 @- ~! u        //--3.创建私钥pem文件! @3 _3 t7 f  h9 n
        file,err := os.Create("./files/private.pem")/ g: d5 u7 a8 |' h
        if err != nil {
" X4 P7 q' ^# \9 B. Z2 D% n, y* |$ q                return err, V2 ?+ S$ f9 L
        }7 v( ^% N  _' p1 }; N
        //--4.对私钥信息进行编码,写入到私钥文件中+ Q' A$ x. W: R' h
        block := &pem.Block{
7 r) v5 Y5 k$ d1 Y: e                Type:    "RSA PRIVATE KEY",9 ^# H& S. r; K2 W3 }% E
                Bytes:   derPribateKey,
6 S: z) Y2 Y* F) y8 Q4 s% C0 Q- P        }
$ r6 d: s- m; e7 e- G        err = pem.Encode(file,block)0 i1 b  k8 l! t  e0 H+ U) `
        if err != nil {' U, n5 F9 `" z, B1 V: X* @$ ?
                return  err
4 [0 Q9 @9 Y6 u, ]8 J6 v        }
1 ?- ~( {7 p8 ~* W* m        //2 RSA生成公钥文件的核心步骤& S# e' A6 H' p" q8 l
        //--1.生成公钥对象- c* [# h6 i' x; a0 H
        publickey := &privatekey.PublicKey7 V0 s- W2 }# g2 i* S
        //--2.将公钥对象转换为DER编码形式0 t* B# A# s% Y1 X! V8 \9 u$ W
        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)! y3 d/ b. K# C5 j  B1 s2 k
        if err != nil {
9 V, b2 I2 [1 Y) r  }0 }                return  err" C  p) m: ]2 Q3 e
        }
( y7 @/ K7 N4 P% v# W0 w- `        //--3.创建公钥pem文件5 m$ M8 ]9 t5 W6 H' l
        file,err = os.Create("./files/public.pem")0 T  k) ~# M  c) u0 K) X4 B
        if err != nil {7 I1 Y- q& w# U1 m& T+ v7 o/ M
                return  err
5 J' A4 g0 S, u4 U        }' S" C" Z( F& {9 J: ~' V
        //--4.对公钥信息进行编码,写入公钥文件中
) |: ]1 {% m. ]/ _2 A; r9 e" V        block = &pem.Block{
, K: M/ H8 l: M                Type:    "PUBLIC KEY",
3 j  N9 y0 t& F8 Q8 A                Bytes:   derpublicKey,
5 F1 {6 N( ?3 k* M) E        }
. |- `. p, T9 I. n& z# z        err = pem.Encode(file,block)
/ J* z" g9 L4 ]2 z7 q        if err != nil {6 y7 F* o7 p1 j8 p; R3 P* m
                return  err/ d% J/ j& M( |0 Y0 [8 ~- a
        }
2 M! J# K* a1 z5 t        return nil9 l1 D$ i8 s# }
}4 L; i( `/ I, q1 x) J7 |
执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3