Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main* x7 z# q1 G& L+ g) k% m- J
import (1 a0 b4 p) @4 [# G" d5 w; g
        "crypto/rand"
) B+ j- ]: E( m% ~. Z+ D+ z, [" o        "crypto/rsa"
; }. K9 c7 }3 d. V        "crypto/x509"
% `: Y1 s! d1 X% X3 \& v        "encoding/pem"
% D2 S& K4 \# G) `; ~% ^% d7 ~        "flag"7 {- y4 {. m/ ?
        "log"
0 R1 V, R5 j( `2 ~        "os"7 S0 t! f7 j  f! ]+ N
)  s( ^' q, U: }9 Q5 }  k: W
func main()  {
2 b8 L3 k& t/ W0 Z+ F9 e        if err := GenerateRSAKey(); err != nil {6 L0 D7 ~$ D8 A7 B; e* k
                log.Fatal("密钥生成失败")
% Y7 w! _2 S7 q$ K, R        }
1 Z' I9 n/ Q  @1 G* m0 C6 ~        log.Println("密钥生成成功")
- a  o- V  @- _+ c( ]6 O}; ^  A8 e& a6 q# q7 M
func GenerateRSAKey() error {
2 a: n8 n* h. O) R0 j        //1  RSA生成私钥文件步骤% K! l( J/ j: ^2 V8 ]  `
        //--1生成RSA私钥对7 [: Y/ f3 O' f+ \$ H9 x
        var bits int
$ o0 V8 X. {" ~        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
# j( U0 |6 k- [% f( y& l  F        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
/ u. g7 f1 t1 o+ a5 H        if err != nil {
# F$ E! j" q$ J4 ?/ M                return err8 J# B" a) D; @  M/ R" I
        }
! l; f8 ?2 c* n        //--2.将私钥对象转换为DER编码形式
( F# X$ h& u8 l' G6 U2 J+ [        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)1 B* b5 P3 `8 Z/ k) u3 c
        //--3.创建私钥pem文件$ V' w% R; m9 T
        file,err := os.Create("./files/private.pem"). t& ?6 O9 |1 p; e* \$ r
        if err != nil {
: [" m# ~: m$ T" C) h                return err* l' X  H; k8 Q7 C
        }) _7 Y: Q. _: t# x. m6 Q
        //--4.对私钥信息进行编码,写入到私钥文件中5 G6 F9 V+ P4 Y; J  ^' u6 }
        block := &pem.Block{  {- }( L  ?* o3 h1 N7 [# B# B# ?
                Type:    "RSA PRIVATE KEY",( a3 j6 E+ L* z+ m/ {3 ]; S: \
                Bytes:   derPribateKey,
& ~& ]# M8 e. P8 @8 G. m; K        }
) Q4 {7 H- a8 J; y8 ]5 g        err = pem.Encode(file,block)9 N8 o8 H" J9 g, m! \
        if err != nil {
1 ~0 R# F9 l9 R1 n/ S                return  err
. n+ _/ X+ H3 W% a, ]        }/ f3 p0 ?6 t, H# v+ `6 P
        //2 RSA生成公钥文件的核心步骤
- w6 n9 \9 Q; K        //--1.生成公钥对象3 }  L( E/ `' z
        publickey := &privatekey.PublicKey
& @- A. X* o+ m8 p+ t/ `( k- ~8 g5 s        //--2.将公钥对象转换为DER编码形式
. `2 m* ~" p3 c7 i% W- k        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)+ B0 N- u: d* t  @! x: D
        if err != nil {
% c" L) u- o4 t+ H                return  err, j0 g" i) A0 S6 Q+ t- e0 r0 B
        }1 r8 ]! w6 l- g' I" U) L# _# @
        //--3.创建公钥pem文件5 f, c$ I% x; z
        file,err = os.Create("./files/public.pem")  ?4 _0 M% n, k" j' O+ {
        if err != nil {
* t) l: r# a/ T6 _8 {) k3 y                return  err
# |  @5 c6 _  `6 n1 C        }( n" b0 h" A  y1 o
        //--4.对公钥信息进行编码,写入公钥文件中, {0 p& o! J5 r
        block = &pem.Block{/ q8 e7 v9 `3 U
                Type:    "PUBLIC KEY",9 ~; \$ I( j$ p/ z3 ]+ L0 m
                Bytes:   derpublicKey,9 Z; o0 D, j1 i3 |
        }
) N2 V& r2 g! h        err = pem.Encode(file,block)
( {8 J0 w: l7 A3 f# H' C* i        if err != nil {2 X7 i( X! F6 X( g2 N: n
                return  err
: }7 V6 h: u; `# L0 Z( W- t  _        }( H1 }9 U- A: h" w7 u* Y9 @
        return nil
$ A6 z- f" {9 V" ]1 E0 I! l2 @}
7 }+ M' m/ c' N. a执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3