Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main- S: ?/ l6 c+ z. b& b! s/ \
import (
' J0 i% }9 C6 k( h6 G& P        "crypto/rand"
! A6 Z, ]; ?% N# n$ Y        "crypto/rsa"# ^5 I# r( g0 u7 p$ r
        "crypto/x509"
: T9 p" A9 x: I* w3 e( k0 k        "encoding/pem"
0 b% J/ a6 E5 P5 J        "flag"3 e6 I" H+ C! |3 [. d
        "log"4 z  ^+ x6 f* q# N
        "os"
8 M! D0 l* @* o" z% y" f% o)( c. m" C, i7 u' e6 `3 k: z
func main()  {
+ P, D+ O9 _4 I        if err := GenerateRSAKey(); err != nil {. R9 G. b* @+ E; L; t8 H
                log.Fatal("密钥生成失败")
& l) [7 b3 b+ w/ {: r$ L0 h* L        }' d+ m% D3 j5 ]3 _* h& Z
        log.Println("密钥生成成功")0 K% V  Y& T( v7 v( z+ |2 v
}
* X& }8 I: R! r9 M2 M* N6 Dfunc GenerateRSAKey() error {5 Y4 X" [4 t$ F3 n* |8 ^
        //1  RSA生成私钥文件步骤. W( F* k$ ~( L% Y( {! n% t! k* N
        //--1生成RSA私钥对
: G$ N1 s3 ^2 h9 |6 Q        var bits int  m5 p. ~" J$ V5 |0 Q( K
        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
" D; R: `# }# N8 T7 G7 q! m5 r4 H; P        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
9 Z3 J# z6 @" d0 _        if err != nil {
9 ^( h' q6 q$ U4 ~+ R. d                return err
) Z: P' |4 J" _3 H2 Z* x        }6 N; |# q8 K& f  o" f4 s) v* O
        //--2.将私钥对象转换为DER编码形式4 I9 j5 S% }7 Y2 X- z% g- f3 ?' g4 A
        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey), l! [$ e5 a1 t8 ^+ v& y
        //--3.创建私钥pem文件: [/ b: i' H1 M( x& {. ]  z
        file,err := os.Create("./files/private.pem")6 g3 e: y" v6 Z6 o
        if err != nil {& @8 k& m, K+ A* b& ?. [9 |
                return err
, b& k. l- r1 j+ A- g. y' ]( `        }, J5 [& N6 Q1 U
        //--4.对私钥信息进行编码,写入到私钥文件中
% o3 N1 ~+ t1 k. N        block := &pem.Block{
8 t8 T1 B+ r3 x9 [0 I                Type:    "RSA PRIVATE KEY",, D0 L2 A$ l  v& q! F
                Bytes:   derPribateKey,; g, `: n' X9 {: }  m
        }
9 n! m7 Y" _2 U) r( i; o        err = pem.Encode(file,block)5 O6 U: h1 k- k$ n& z+ J
        if err != nil {, \# r' k* l. V& z, G! ^  {5 l
                return  err( B& H$ N4 V5 l9 Q, ~" I8 @
        }0 b* {7 u' T0 l' ~( q
        //2 RSA生成公钥文件的核心步骤$ T/ T1 Z' f# V, P4 C# [& p1 I9 I
        //--1.生成公钥对象
$ Q& \, h1 [! d& h7 h+ m        publickey := &privatekey.PublicKey
; g. d+ F% Y9 ^        //--2.将公钥对象转换为DER编码形式4 Q& I2 Y" F) q8 H( `4 v1 I6 r, n
        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)" {3 N  D& E/ A( N' y: J& O# Y
        if err != nil {) ]" j8 A1 K9 K, R5 ]
                return  err7 J% r+ ?4 }1 z( U& _8 x0 S
        }
# c+ C. T- o+ q% q; z, C2 K        //--3.创建公钥pem文件4 ~" B4 p8 U7 `' Q1 ]8 A7 w% F7 z- t" ?
        file,err = os.Create("./files/public.pem")# H( m& R6 H" W$ n0 Q. J) ~. h
        if err != nil {
% w1 @& ]$ J8 S* R                return  err. G8 L2 Z/ T- \& _9 J$ ~* K5 v
        }- B) v3 T) q' |' i) B% Y* u9 r
        //--4.对公钥信息进行编码,写入公钥文件中: i- U, N. z+ H# ?5 l% C1 M
        block = &pem.Block{
5 w/ w, X' e* q                Type:    "PUBLIC KEY",
0 R, p( Y/ O% {1 a                Bytes:   derpublicKey,
' _1 i% t7 e8 H4 _8 [        }$ @/ E% t' Z0 ?6 N- M  S* z* r5 k
        err = pem.Encode(file,block)
* b8 g/ F5 c, c        if err != nil {
  v# o5 a! V) ~/ ^# B$ X                return  err
! [0 J4 i% h- c) A0 Z        }' ~9 H% m/ J* V6 K+ P0 q( C
        return nil
5 n- T) i3 a+ U+ L# h. t6 t, u}( x6 c; `* C$ [3 U, |
执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3