Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main
' h2 v2 D" M. u1 u/ h& Jimport (
- [9 C) u" A8 P6 D        "crypto/rand"  w) {* _# T; I( D/ G' z% N  G
        "crypto/rsa"
3 `2 s- N) F0 `+ W% ^! Y; }% N        "crypto/x509"
. x0 o( w( K8 r/ s) H; i0 i        "encoding/pem"
& u0 H1 O8 m& [9 m/ A: B        "flag"
# u- t5 r" B  j  V3 f$ s        "log". y) {  F5 v# t2 G
        "os"
# q. B4 d3 \4 o& j)
& P+ d1 ^8 V' E, |. {% C: A' xfunc main()  {
4 n4 {  Z6 i5 N( q        if err := GenerateRSAKey(); err != nil {0 s) X( K6 ?, R$ s9 {8 y( J
                log.Fatal("密钥生成失败")
: l$ W  z' i% a        }8 _$ k9 d- L) j1 f, e" X# y
        log.Println("密钥生成成功")' k7 x5 W& ?. U
}
2 s% b: P6 y+ k3 b# S) V7 Yfunc GenerateRSAKey() error {% l' \. y  e) v* ~$ _1 a
        //1  RSA生成私钥文件步骤* o  b, i# _2 p$ \) W
        //--1生成RSA私钥对1 u. r9 n+ u# h6 Y
        var bits int9 N- s4 j/ [. \- {' R
        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")3 T) [: A4 R! e/ j) r$ h
        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
8 @0 E) _  m, m; X/ T" J, ~2 s' w        if err != nil {4 |* h& F1 ~$ f$ Q( o, U
                return err5 M% T5 L9 c4 B" E) [& _+ a! j- v( A
        }
* V% E- K& F' ?- A        //--2.将私钥对象转换为DER编码形式# H3 A0 g0 k' |  [
        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)
! |6 C* x6 b% V7 e$ x. T        //--3.创建私钥pem文件
# ]2 A7 o* T) J$ g% C- K        file,err := os.Create("./files/private.pem")5 a" ?: e0 n. z: D; `8 u! D' W
        if err != nil {
/ U4 \6 b. H+ p/ B3 r8 {, y! ?                return err
" {" [6 ]/ `$ z) ]5 F0 u; a3 y        }& B$ k! C) L$ t3 J
        //--4.对私钥信息进行编码,写入到私钥文件中) T; g" c, {. B2 b. H
        block := &pem.Block{
6 X* J0 O% Z3 K5 {, `- y' }1 M& X                Type:    "RSA PRIVATE KEY",4 T, M4 Q1 W+ ?
                Bytes:   derPribateKey,
) j" i+ ?5 |- j( L: _        }$ f- D5 {* F# B' y: R" o) ~
        err = pem.Encode(file,block)
, @1 R( _% }+ O$ A- S+ J. k/ z( M        if err != nil {$ u9 z9 _& n* I1 K3 L
                return  err
1 D3 k9 B5 E( e# C) e        }: m- q4 w  ^4 `' Z7 |& p
        //2 RSA生成公钥文件的核心步骤# y# b4 L& s! c& C
        //--1.生成公钥对象0 p( F+ r& f1 Y# r
        publickey := &privatekey.PublicKey
7 d) }" T! P1 G. s* @        //--2.将公钥对象转换为DER编码形式
7 v/ C; K  h0 h1 S" _8 ?4 a) p4 w, G8 w        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)$ T; ?4 {' h/ @) G$ i3 O4 b6 z
        if err != nil {7 X% @* ?( q+ Z0 r- K1 }
                return  err) Z. Q1 f* p+ l& [3 |" D6 C
        }
% c7 W/ Z: `4 L, [  ?2 D8 p        //--3.创建公钥pem文件
- A, n' K0 S' M. W" H% [        file,err = os.Create("./files/public.pem"): h! o" T( P, _4 W
        if err != nil {
6 n2 e' ?8 b! ?" d7 z5 {                return  err
$ _2 ]2 _$ Y( F+ B6 t9 m        }7 j; D# U. `$ U7 ~+ B
        //--4.对公钥信息进行编码,写入公钥文件中
% M: M; w0 B; b0 a# v* V        block = &pem.Block{" M+ `% n5 d$ N1 ]! k- F% q$ u
                Type:    "PUBLIC KEY",
1 M( x! q; `8 b2 l                Bytes:   derpublicKey,
5 e+ V  |9 C/ L" ^* n% E8 v        }% s) W5 h9 z( p1 |" C
        err = pem.Encode(file,block)
2 [3 U  |+ `, \! j2 ~; _        if err != nil {; b) J, H/ b  y4 f2 z  {
                return  err
1 ]' Q' r& L; r3 ^' v        }% _" S# `' x6 M9 h% e( Q
        return nil3 {; S$ }1 P5 B  W" D+ q: g" [
}7 q8 D! I8 ^. [9 _  D
执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3