Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main6 R. N) j! d- z: d) d( u
import (6 s" B; l" X3 I7 S* r9 f3 \7 h! l
        "crypto/rand"$ u! O  H3 ~: Z7 n
        "crypto/rsa"8 D( Z9 r' Y) [4 v  s
        "crypto/x509"
" k$ J* ~9 k2 e7 B        "encoding/pem"
+ _  c1 h! t, F+ q0 w        "flag"
7 W6 a3 ]7 @; V( i5 Y3 e# J        "log"  ^9 p" V& I$ i4 f2 D
        "os"
9 D# P9 o( l6 X# ~' b: ~)
% j" l3 X- T& ^$ o9 d, ufunc main()  {
* H# {( [( ?: ]7 g        if err := GenerateRSAKey(); err != nil {  ]5 n! l  z1 ^+ U5 b" x
                log.Fatal("密钥生成失败")
! q- I: ?; r0 Y. J        }- \7 u% v# b1 p( c! A% Y1 z$ w
        log.Println("密钥生成成功")
2 n; ^, n: s2 {}
2 ?3 }7 I: E5 p* G7 {func GenerateRSAKey() error {- A7 j" \5 u1 k
        //1  RSA生成私钥文件步骤+ G0 e0 o* N+ Z# t) l: Q
        //--1生成RSA私钥对7 K  D( [! L% k9 i5 z1 V& E6 D
        var bits int
7 r" s0 B7 j4 ]! h0 ?" E* o        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")6 T- k& y8 }8 ^8 U
        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
, b$ l$ @+ v9 ]; I        if err != nil {
+ _; @# t* U2 |1 W1 N/ b                return err
! c5 Y7 K4 x" X        }" f1 g" e. q: w' f+ u3 ^" h
        //--2.将私钥对象转换为DER编码形式
% ^8 H! I3 \5 }5 Z% `        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)
+ Y! Q) U8 l# n% v) Y  _* g% p        //--3.创建私钥pem文件3 r) W4 q, m# A6 |$ V5 c( p
        file,err := os.Create("./files/private.pem")
7 ~5 v; }4 ], z; F& ^        if err != nil {
6 ?1 Q! R( ]' K                return err
% h  t" ~; j7 C3 V        }9 K2 p" I0 x; B2 M$ q" x8 E
        //--4.对私钥信息进行编码,写入到私钥文件中; F4 M6 M2 v) n7 I1 ~
        block := &pem.Block{( c! T5 A, Q. l& O- _
                Type:    "RSA PRIVATE KEY",
( a8 K& M, g( ^; }4 r                Bytes:   derPribateKey,
0 \- b8 p) f1 l3 q" u9 k        }
% ]9 M& ^" V# ^* L1 Q        err = pem.Encode(file,block)
9 v/ b$ F0 g: w; g" Z9 W" {7 q        if err != nil {$ t! l$ Y  @/ ~! G8 `8 |: `% J( P, b( M
                return  err0 m9 Q5 B" \7 \) \/ w* X# C
        }+ T. i) d9 |! A  [/ d. Z/ r3 q
        //2 RSA生成公钥文件的核心步骤7 U( N5 P2 B8 w  o( H$ m3 Q
        //--1.生成公钥对象
* Z1 t# G* f8 m7 r0 J0 F9 h        publickey := &privatekey.PublicKey2 \( Z0 l5 A, a* r2 ?: H) G
        //--2.将公钥对象转换为DER编码形式
& z5 J; P) p, \$ f2 h        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)
4 [, Q4 y7 G' h& v& S3 h        if err != nil {
* F1 ]$ r9 {7 H1 d                return  err& E" V; p4 L- P- y, f! \0 i7 L8 [
        }, {# i: t! F8 n" m/ e8 T2 X
        //--3.创建公钥pem文件0 w  z% Y& y( m. G% [$ j0 S
        file,err = os.Create("./files/public.pem")+ e7 G4 s) R9 [+ I, ~3 X
        if err != nil {
/ O- ]% C( Y( I                return  err5 {2 X$ G0 f# G5 k
        }
6 R5 k/ {9 T. f: }        //--4.对公钥信息进行编码,写入公钥文件中* q! y! ?* `3 V; m
        block = &pem.Block{) Z2 ~! W- ^' S+ Q* ?; Z& m( |
                Type:    "PUBLIC KEY",: k3 P; i% W' R
                Bytes:   derpublicKey,. R9 U3 ?6 {6 P5 q
        }1 R3 H7 a  x# u, T4 t; ^: k
        err = pem.Encode(file,block)* j# C) s9 H% C  P1 X6 K
        if err != nil {! L) h8 T% f  z! I
                return  err- }7 |( k. Q. g% X
        }
7 A% H% R9 ~9 M- x/ B" W1 z# ?        return nil
3 K" Z3 C3 b3 M, U}
8 K3 A2 N  c7 E: e执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3