Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main
. {" I4 h8 @- T4 _+ R. r) eimport (+ d  h* Y$ y: i8 y0 B2 e8 s
        "crypto/rand") N8 P$ l$ s4 A/ O* k
        "crypto/rsa"
8 u5 p" _9 u9 _; f! `* Q  z        "crypto/x509"
- T4 h) _$ d3 C7 A6 t7 `# w        "encoding/pem"
' [2 `+ J/ U! \% Z        "flag"; y" k. w0 T% L! }2 D& \4 b7 B
        "log"  o% `3 N# O( @- K/ n' i5 Q7 f
        "os"/ C* d4 s( u. a) G$ g4 u+ @4 t
)
! W$ a- o' Z8 }9 @- ~& Y& V/ X4 A) nfunc main()  {3 L& z, s- {; `0 S
        if err := GenerateRSAKey(); err != nil {; g0 j# h9 W, L/ ~$ ^
                log.Fatal("密钥生成失败")
; j( P% N  o1 a7 r. b& |( y        }# q( Z- l) w# }0 Z. V
        log.Println("密钥生成成功")
4 s/ g1 z0 s! w# W$ \& d5 r}
4 w1 M& \1 K( Q( H' ~1 afunc GenerateRSAKey() error {
0 i& t" q4 P  J1 @        //1  RSA生成私钥文件步骤% ]: s7 D/ a) c0 u2 M3 z
        //--1生成RSA私钥对8 _4 B7 J. c  |# {6 N$ L) n7 T" |: q
        var bits int
" Z6 K) k5 k2 k- K- I' m4 x        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
: s* H& F3 @9 a' p# \3 d& Q9 E        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
; Q, |- n+ q1 B/ i2 m- b1 T        if err != nil {
0 @+ |4 b' B0 E8 `                return err
7 |* c% o1 [' R8 V" b        }2 R" v. v' T( x/ w+ l; [/ q
        //--2.将私钥对象转换为DER编码形式
$ x9 j$ ]/ H" H' R        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)
5 \( r' t6 W& K/ \6 [" p0 p7 O3 J        //--3.创建私钥pem文件
% H  g8 B& L8 J2 f        file,err := os.Create("./files/private.pem")
. T) k) t9 E, M        if err != nil {
* T' s; C2 p# H+ a, Q; p                return err
% W, p# R/ {1 U        }
* \  N+ M7 k8 I        //--4.对私钥信息进行编码,写入到私钥文件中0 I- l  D6 T2 {$ n
        block := &pem.Block{
* C, P) K$ m; J* |4 n                Type:    "RSA PRIVATE KEY",
5 y0 h5 S1 ^* m, C8 s2 W% Z& h9 U                Bytes:   derPribateKey,
/ j6 \- i8 F1 A        }
+ N5 ]7 r& [5 @8 J9 v        err = pem.Encode(file,block)
5 q! i# Z( U" H1 Z! n        if err != nil {
3 r5 b7 V" [& F/ {                return  err
3 U- t1 ]  w/ `% ~" c/ D        }
+ k. x! ^& E; H/ [: ?        //2 RSA生成公钥文件的核心步骤. z' j4 t& I8 T! m9 d" e% G6 C
        //--1.生成公钥对象, V- n- z  W0 ]3 _/ a- F7 M/ J
        publickey := &privatekey.PublicKey8 ?- a6 }* b: }2 X* F: E
        //--2.将公钥对象转换为DER编码形式9 b# y: B  j% c. T! f( B
        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)
1 d" n- l' w3 X) W        if err != nil {; G! E* r6 h5 O' S' G1 H8 l
                return  err
4 q7 Q/ L; ]7 ~! D4 N        }+ N. f1 n0 }* {& z* t% o
        //--3.创建公钥pem文件2 i% _, j! Z2 F* n
        file,err = os.Create("./files/public.pem")
% H( ]& v8 Z; _2 Z( _4 Y5 H        if err != nil {
( S* P# ^! i  @+ g3 c9 F                return  err
' F. I$ R8 t' S# u8 l3 `7 A        }1 c% y$ K5 \# V& u) n8 D1 n
        //--4.对公钥信息进行编码,写入公钥文件中
" X: o. `$ f, T& @- r& ?        block = &pem.Block{2 N- X, z6 G  c1 s2 `
                Type:    "PUBLIC KEY",
) k" G) }/ k+ b6 ~* x6 ]& |% w! {                Bytes:   derpublicKey,
, O" Z. {# n- p# m* F4 d        }
# w) y  h" ?  J! b0 k3 n        err = pem.Encode(file,block)
2 |# f8 w" ^' J5 d' [        if err != nil {
9 c* y& g8 [1 k' `4 l5 L$ d, j                return  err
4 ]8 x9 u3 @3 M6 J2 V7 L" U        }0 P: I& p% D2 r" L' c% h0 {
        return nil; D0 Z+ a. \5 x1 w9 Z" W( p
}& T: c5 D, [" s* `
执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3