Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main* X8 L6 S' c& ^8 M1 z. f3 A, E
import (
2 W$ {1 P0 p8 `( B) `' o        "crypto/rand"
, _  m' {1 X8 y) v; e" I+ q        "crypto/rsa"
4 Z* E# I  }4 v$ A        "crypto/x509"" P9 A$ s' D" p* a+ B, y
        "encoding/pem"
% ^" s( I$ U: |1 i9 x        "flag"
8 i7 M/ |, F$ A+ f! G( B        "log"
6 g3 ?/ z  v/ d) W9 `5 w+ g, L        "os"' p0 z9 n  q0 \. \( S. S4 [
)2 O0 a& G9 j0 ~$ E" G
func main()  {
& d8 g6 t% [' P' y; P        if err := GenerateRSAKey(); err != nil {
5 v# i" \) V  `                log.Fatal("密钥生成失败")
% `: @7 U+ F5 V& L# N        }$ w3 A# E" V* q5 Z4 I8 j9 Z; h1 Y
        log.Println("密钥生成成功"); j- {" H. p7 M3 d' f
}
8 h: Q0 B& \* @/ M- z4 l! n" afunc GenerateRSAKey() error {5 d& j+ i' E1 S8 l; w) y1 [7 R
        //1  RSA生成私钥文件步骤
9 U' m) S3 ?* z0 |8 m9 ]        //--1生成RSA私钥对
2 g2 M' o/ h9 m; y' W- p+ B        var bits int( d, w2 A" [' n' X4 O; s. w
        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
; z- [9 b! I+ J" o7 t7 s; I: y        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
$ B% u- o9 t' b; `9 x' n" }7 ^        if err != nil {  J  A9 V- F" l3 S9 q0 b9 g
                return err
8 B& C6 D/ J% E" @* v        }6 F- Z. e7 M/ |: |" t2 y
        //--2.将私钥对象转换为DER编码形式
+ ^0 v5 I# T3 i7 b        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)
$ e; M" q! F  d6 H3 X: l( e  X        //--3.创建私钥pem文件8 }$ R: ?# N( t. A- M1 J/ j/ ]
        file,err := os.Create("./files/private.pem")
+ b% B+ r5 Z* _        if err != nil {: B* k' v1 n  q( O
                return err
0 Z  C( ]+ T4 o        }/ M$ s7 p& ?4 A' P2 S  i
        //--4.对私钥信息进行编码,写入到私钥文件中( L$ o! h* i. m) `( e/ f
        block := &pem.Block{6 v  B* L5 n9 }: W
                Type:    "RSA PRIVATE KEY",
1 b% [9 u  [3 {8 M1 ]4 F( M                Bytes:   derPribateKey,
! C% v5 C2 G( X# Q' j        }
" Q8 N& _* h% _1 s5 F. S' M+ C        err = pem.Encode(file,block)
  U- a! r; ~8 u0 _        if err != nil {/ k! x0 ]& J9 ^( Y
                return  err
( {3 Z) S/ _! U( l; d8 T& a5 W+ w3 X7 O        }& P* t4 ~3 V1 K, c0 j
        //2 RSA生成公钥文件的核心步骤
5 z( |3 t. W* }! \5 ?! s" N4 d2 J        //--1.生成公钥对象
  R1 }5 g, b# o8 }) }: a        publickey := &privatekey.PublicKey
; {, U2 H# a0 z" I% w: Y& e$ P        //--2.将公钥对象转换为DER编码形式
3 P* Z4 j3 q% z7 A7 n0 A        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)9 V/ i& `$ P& H2 v0 S
        if err != nil {! A, T; N9 A. |$ S3 U4 r( L* A
                return  err$ F/ s& W- b8 K3 ?4 e' b7 Q
        }
; i$ b) f: s! l( k& K  C        //--3.创建公钥pem文件3 B8 J( Q9 b- x7 Q, }
        file,err = os.Create("./files/public.pem"), O2 ^$ @6 I4 O/ x  R' Y* Z
        if err != nil {
. a& P, d1 G7 D6 J  G9 G5 A                return  err% o# \. K5 A, L$ w: q
        }; `  q$ V: b( t9 G$ f
        //--4.对公钥信息进行编码,写入公钥文件中  f( B4 `2 I' s( _2 U- d5 o& {5 y
        block = &pem.Block{- w# v% o) ^# t5 J7 F5 n% P
                Type:    "PUBLIC KEY",# m6 {1 I' b2 M# X
                Bytes:   derpublicKey,
( P! \$ e8 M! \# o" u3 a5 k9 c* B        }6 x& W) C- B. C, f& }6 A1 y* s: `
        err = pem.Encode(file,block)
/ ^0 o2 P: ^( T) a( l$ |4 F        if err != nil {" G* r# r" A/ V
                return  err- V0 W' T2 Y# d' ?/ I
        }
  A1 {7 H$ ^4 K- h) Z        return nil: f& O" U. ~9 V4 H) q1 n3 q
}
6 {1 M, m( I7 L) g1 t; [执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3