Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main' B; v& G  E8 k0 t4 Y
import (
$ t3 L7 K( T. x) M- s1 }        "crypto/rand"
% }2 O; D6 Q2 w) C        "crypto/rsa"
2 C" M) J3 j7 F# B3 R/ Z        "crypto/x509"
) z5 f9 ^4 r! ~  A. _        "encoding/pem"( w2 I) z6 W1 F: c
        "flag"
$ j9 n( G0 E# z# A        "log"1 z( x) x% V  c4 U6 _
        "os"- S) k) z& n) R6 x
)
* O( a! o- x  Efunc main()  {
5 Z: t* r& F- g8 x% u        if err := GenerateRSAKey(); err != nil {8 S  F& i. o3 ]) D6 A% H* E& U
                log.Fatal("密钥生成失败")4 \; r0 s# W' c& ]: i8 X' {
        }
* `% Q8 l6 _  G* z9 g4 \        log.Println("密钥生成成功")
) W- d4 m; F- j5 q: A9 B}4 r$ ~7 N4 X1 b
func GenerateRSAKey() error {
2 p2 l$ g1 {6 H+ P! w        //1  RSA生成私钥文件步骤
$ `) |% A1 V6 D        //--1生成RSA私钥对2 @2 D, o) K0 e5 I8 k9 ~
        var bits int
" O2 h, m6 X) s6 L$ Q# p9 h        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
% s9 H( W6 o$ a' x        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)7 t0 c! s  z7 m1 u
        if err != nil {
8 o& q) j/ j- m" u                return err
% x0 j4 c# ^  L8 s6 q        }
" I: s+ E# i# k! q. E        //--2.将私钥对象转换为DER编码形式) n- F7 D* d2 ]; F3 k
        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey), h3 z& P. e) I5 W( w' t* d
        //--3.创建私钥pem文件6 S5 W& Z$ B4 v( Y& h1 F
        file,err := os.Create("./files/private.pem")
6 v# \2 o: U- S: l* x. J        if err != nil {
& l. |1 T2 n- \% C                return err) d! t9 J. I" R  t( X+ \  F
        }
& O! v  N& `1 \! d) `2 s: _% @. P% _! Z        //--4.对私钥信息进行编码,写入到私钥文件中
# ?) b0 R" ~% y. v3 \        block := &pem.Block{7 N- t5 a; I! p  B* b+ [
                Type:    "RSA PRIVATE KEY",
) T* O9 b3 k0 y- P1 ?                Bytes:   derPribateKey,( j8 j- ~5 K# t% U3 i" V6 X
        }
& o3 N/ w% O. ~6 x        err = pem.Encode(file,block)/ \& F: q' I7 q- K3 B, ~# m
        if err != nil {
; H; X/ }/ ~/ \0 v. y; w                return  err
# e/ @: u& S2 W" K7 b" C- y" D        }; `; Y* F2 L! [
        //2 RSA生成公钥文件的核心步骤( z0 o. ^4 q# k
        //--1.生成公钥对象
' ^9 h5 w9 `8 o+ \, k, Z& c        publickey := &privatekey.PublicKey
/ G/ Y. }  R' o! i0 X        //--2.将公钥对象转换为DER编码形式) [. ?) c  l9 C  Y! j5 E
        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)
; A& Y6 ~- {8 A; H/ s! u$ ~        if err != nil {
6 K6 ~0 r/ d7 Q/ g+ W. }                return  err- R  q+ y& y. K* d) ~/ J% W4 q
        }
7 u  S9 F2 \# [        //--3.创建公钥pem文件
% P) v2 c# u* Z6 @) y        file,err = os.Create("./files/public.pem")& v9 W, M( f0 r& P  x, n3 O3 E
        if err != nil {
* @, E, q5 m0 w0 a2 _                return  err
  }& Z! I$ Z* m/ o0 c" ~        }9 s7 |  c) P  a: a# M" q3 b* L. Q5 s
        //--4.对公钥信息进行编码,写入公钥文件中* k4 q& b9 T* [7 l
        block = &pem.Block{
& H, u$ i' y7 h0 T                Type:    "PUBLIC KEY",
- ?- c6 f9 I2 i6 S                Bytes:   derpublicKey,( K$ m+ x* Z$ [& ^0 w6 h
        }
& x) W; @  [5 g4 F        err = pem.Encode(file,block)
: A+ \1 Q# N0 _0 y        if err != nil {
- x) l  s' _; l/ J, m                return  err  \" @# u0 R; b! V% {! @7 Q
        }/ k' d! A/ B2 C" c3 ^$ I
        return nil1 n4 C5 Z' _% G
}4 K/ T; t2 o" W- `6 w  x  B" e. j/ t
执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3