Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main
  k7 w- w! B1 p* gimport (7 f9 X; @. w' ]/ G- t8 |6 t
        "crypto/rand"5 w( b$ Q# l3 L. W3 J: }3 E. i
        "crypto/rsa"
2 P- w& d  [6 ?' s; f$ D        "crypto/x509"$ R+ z/ b4 u: B( ~
        "encoding/pem"
3 B0 W: d! ~" Y" ^7 ^5 ^- U1 V        "flag"+ R8 e3 x. N4 l7 Z+ ~
        "log"
# G8 ]+ b! W: S        "os"7 a' r' L6 l6 z6 N: _- p7 z  s! V3 `
)
; p" }: s$ o; `0 }# x4 hfunc main()  {
! U, f4 t! E$ B9 k5 X) E        if err := GenerateRSAKey(); err != nil {* N$ Y9 z0 Q1 M1 ~$ c6 X
                log.Fatal("密钥生成失败")
" W! {0 J& F! [% v0 k2 D        }
7 e4 k8 W9 z9 ]+ f4 ]        log.Println("密钥生成成功")9 }+ c( D, n# R" K1 @' a
}
% E/ r4 r# ?! h  Ifunc GenerateRSAKey() error {
+ a5 \& b- c( ^' ^! v7 K6 S, M        //1  RSA生成私钥文件步骤
7 J$ S1 W7 M% s# f        //--1生成RSA私钥对; O) n& I+ [, D' h* f2 o# i
        var bits int
0 q  C8 N1 |: L" r        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")- d" W1 \2 G4 G/ m" d
        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)9 l4 M$ A+ p& S, T
        if err != nil {
( m+ Q5 L8 K2 A2 [0 C& g, p                return err
. [2 e. W& b6 x9 W. a  Q5 ^6 r        }
  J8 f3 x% N* I, \5 P& k% E        //--2.将私钥对象转换为DER编码形式
% K5 ?3 l; ?4 b        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)3 l3 k  b# \8 G3 Q
        //--3.创建私钥pem文件$ Y4 B% H/ \; E$ M) V2 L
        file,err := os.Create("./files/private.pem")
0 I8 F# P* s% c        if err != nil {& \# k0 {4 E: F- K
                return err
, {* Y* C+ U5 w        }
* t% _* d. B8 X0 X        //--4.对私钥信息进行编码,写入到私钥文件中7 o5 D) z! `- e# G0 u# g
        block := &pem.Block{& k+ n& q/ c+ _8 g- s& \
                Type:    "RSA PRIVATE KEY",
: a7 u* r* h+ J; h* ?                Bytes:   derPribateKey,
+ c' C0 R4 o# t        }
9 p6 F: F& n3 d( \; @: z! u& p        err = pem.Encode(file,block)2 i2 O' j' R+ y" k2 ~
        if err != nil {2 `9 A( Z3 i# k( D1 B2 t. M
                return  err
; y! L1 b; i; z/ b/ T4 q; i; X- \        }
( B( K4 \. d0 J0 E) P; G        //2 RSA生成公钥文件的核心步骤& ?3 w4 \2 h: B. K
        //--1.生成公钥对象( a* k5 y5 Q; f3 y7 X. k
        publickey := &privatekey.PublicKey( t1 X- e- m6 u& M
        //--2.将公钥对象转换为DER编码形式0 M, W. B$ ?4 @+ l) w
        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)
- j0 Z* W0 |: h& j' s  @4 v        if err != nil {% W$ a1 E# F+ f1 J$ {
                return  err& J  b( o) ?( y, ^6 y) h5 r! r
        }
2 `) |' ]1 u7 C9 N5 b        //--3.创建公钥pem文件+ Z( a8 Y4 P* i/ r. b# O, l: w
        file,err = os.Create("./files/public.pem")
$ k  E9 c' x, g. a        if err != nil {
* h+ g$ F2 C* f6 g1 K                return  err
+ F* ?8 W5 j1 m        }
8 [) p* z3 p( _" s3 a2 \        //--4.对公钥信息进行编码,写入公钥文件中$ o  c% W# b" y% t4 m
        block = &pem.Block{
1 {3 o% w& |6 w7 e7 K8 }2 P4 h5 J* d                Type:    "PUBLIC KEY",
% P. t- x( j* X                Bytes:   derpublicKey,' V6 F" C, e! o) Y) \
        }
- ]8 {$ A- e5 q- }% V        err = pem.Encode(file,block)3 h: k5 T& ]  `2 q0 P
        if err != nil {# D' J) W3 I+ R5 A4 x
                return  err& R) A9 M4 D$ ^+ ~
        }# N1 O1 e# ^) y/ N8 s2 ~
        return nil
! _  E1 n, [1 d5 s. c9 Z  N- n/ R( H}
  l4 e: L3 T) m! }1 r" A执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3