Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main
* i7 h( r, _+ k* U  F6 l' q1 X$ Qimport (6 m; S) o  s; h) x% E1 N8 r
        "crypto/rand"
& Z* N9 N; x  s1 {8 W# s. r2 y        "crypto/rsa"
7 ~6 r- Y* n/ t; X* |* ?        "crypto/x509"3 }  q) U2 l% a3 C# J  x% q
        "encoding/pem", D, _+ \; ~0 n% [
        "flag"
* S) ~( X5 d$ c        "log"
4 e$ h; h6 O( J5 b) N/ O        "os"
) x+ {; p  O7 O6 ]5 ~. Q)  ?3 x2 F/ _  t3 T" I
func main()  {
8 F+ b0 ]7 t6 n+ x8 P4 [- \, [  O        if err := GenerateRSAKey(); err != nil {
# C) Y. g- v  r1 s8 }$ ?                log.Fatal("密钥生成失败")
2 r  S7 J+ m% v- K, e, E! s( y        }
- i  z( p) V" O. W8 }        log.Println("密钥生成成功")
+ a+ s% r% `+ F7 W}) ], E2 K5 `. X8 Y
func GenerateRSAKey() error {
4 W1 b0 E% F+ z9 Z; y        //1  RSA生成私钥文件步骤" J: n9 n1 |* J& p4 o2 z- \  U
        //--1生成RSA私钥对5 i$ D0 _$ D! z) G2 H( s
        var bits int- ~7 ]4 D% |+ y" v2 u
        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")$ b/ J) z8 A3 t" E8 W# H% l
        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
( K& ~7 X5 e  o        if err != nil {; `. v' U$ c$ p7 D" ~0 f- k
                return err
9 K( f  }3 j6 g4 S. H% s        }
* }8 Q* O/ O; F7 F4 v        //--2.将私钥对象转换为DER编码形式6 l. z$ m2 o+ B4 K# W9 X$ E' I7 M
        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)- s% S* z+ m8 T. z6 b. U
        //--3.创建私钥pem文件+ l/ j/ X7 ], z, q
        file,err := os.Create("./files/private.pem"). D9 z. t: }: H$ j
        if err != nil {
$ g0 ?- f* m# H( l2 L, G' I* c                return err" B% H* c7 f4 F, a: L8 P/ W& ^/ m
        }& N& ~* j. h$ g7 l
        //--4.对私钥信息进行编码,写入到私钥文件中) |/ e2 l2 |5 `0 n
        block := &pem.Block{
" l7 H  d( X2 U. `7 t: n                Type:    "RSA PRIVATE KEY",1 P0 v7 G: ~* c
                Bytes:   derPribateKey,
5 ?8 s/ }6 O; J) e$ k( c        }
' I$ m, T, k1 N. J5 U, [! f        err = pem.Encode(file,block)7 C+ f9 u$ W8 w
        if err != nil {
$ Q* z( X' ^9 G& \; V                return  err
2 p0 N8 X' Y' S7 m        }9 V3 W  @% F. D7 Y+ _. m
        //2 RSA生成公钥文件的核心步骤
9 Q' g! J7 ^$ e        //--1.生成公钥对象
9 y% f5 Z$ H$ g- X( b# z        publickey := &privatekey.PublicKey' r( G2 m8 j0 w- t: m* o
        //--2.将公钥对象转换为DER编码形式- R2 |  B' A  ?# L8 A. A
        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)
; l0 Z0 r0 p8 ]6 D, |2 M        if err != nil {
6 m3 N" y5 `6 i# ?' a  m( W                return  err" t+ }+ e# T+ X! v
        }
0 X. n" z" l. m4 O9 j2 a8 _1 Y9 E( k        //--3.创建公钥pem文件
0 K, O' {5 c' H( L        file,err = os.Create("./files/public.pem")  j- z9 |1 w9 f3 x8 h
        if err != nil {' R- `6 |2 _+ V0 [6 e
                return  err# a2 |0 p" x1 a; T+ {
        }* X% s! T7 Z" L2 {. Y
        //--4.对公钥信息进行编码,写入公钥文件中0 F! r* E! y  H  a- u( H
        block = &pem.Block{
$ ?- p& Y3 G7 z' ?( g& F# }                Type:    "PUBLIC KEY",
- S6 U$ ?( {: G- {8 X% f! y                Bytes:   derpublicKey,/ [7 n9 m% {' P6 V
        }
! `8 @% J3 F& C* ?        err = pem.Encode(file,block)
- T- X3 P+ ^1 S, @9 ]        if err != nil {2 h# u% h8 V4 x8 a
                return  err
1 a- C2 P: D7 G5 I+ B. B8 h: r. E        }
! }# e( L3 `2 V; t        return nil
8 q% A5 R# @8 ]  Z}+ Q0 }% S5 y" K* R. B
执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3