Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
package main
1 [3 o% |# z/ H8 A  ]) e  I* Jimport (- }2 c1 v+ A. x2 g# P
        "crypto/rand"0 V# {9 W, `0 y# ?, Z" {+ r
        "crypto/rsa"( W$ Y  o8 t% A7 D% _5 x! m
        "crypto/x509"8 i6 u0 N! H% N9 W3 R6 c* V; k! E
        "encoding/pem"
' K4 v, G9 u. H3 v5 i        "flag"
. Q5 s; p  J! T; x        "log"
0 L: V$ B" {5 D6 b0 N5 N        "os"
* P$ Y$ m4 j' Z)0 r0 a9 D& L+ r8 @" \; \5 J
func main()  {
0 N: E5 G( Y7 g, \; E, ]        if err := GenerateRSAKey(); err != nil {
; V$ G3 u4 q  W% D8 J( v+ |+ l                log.Fatal("密钥生成失败")( [  i+ ^% p! s# y) q
        }
# p% B/ G! F9 \: M) n        log.Println("密钥生成成功")) ^) Z# C9 U: [2 A4 x
}
6 m( \, J5 R- o' Nfunc GenerateRSAKey() error {
$ ^, H; g7 f4 C8 k* r# @& S        //1  RSA生成私钥文件步骤
9 ]3 ?* b6 A8 x) {; r" m        //--1生成RSA私钥对
& K! N4 x5 p. p) @) I4 t7 X        var bits int  M) j& M* [( k9 I6 H
        flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
/ ^+ Y" O3 \1 U        privatekey,err :=rsa.GenerateKey(rand.Reader,bits)1 Q7 v8 M- P$ T. G, r  y* o
        if err != nil {& n3 k% `2 g1 x, v1 L9 L
                return err
9 S6 X* L* r: P2 |( v9 N$ J+ d        }1 m, n/ ?: w" ~/ l  ~; j
        //--2.将私钥对象转换为DER编码形式
1 s( Q2 B2 L' z( L  W        derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey), v8 x1 e0 L' r9 r6 D
        //--3.创建私钥pem文件1 r/ u7 ]4 Y: B9 _% Z& d
        file,err := os.Create("./files/private.pem")+ Q+ O+ g. [, f
        if err != nil {& F/ C; F! g" @( ?! |
                return err5 o/ V+ X* _& ]+ p% v
        }
6 B: j2 K1 h1 E/ U. s1 c        //--4.对私钥信息进行编码,写入到私钥文件中
+ v( P( o8 h3 w3 b7 |        block := &pem.Block{
8 j5 j- @) j* O7 M                Type:    "RSA PRIVATE KEY",* F# N: G, a: i# [# _8 _3 ]
                Bytes:   derPribateKey,
; d: w9 m7 Q2 a5 g        }
9 J2 [5 v* \! A. u        err = pem.Encode(file,block)0 F" w3 h4 F+ d2 G& k5 `
        if err != nil {
2 L. F8 C. _; L1 n                return  err- x3 W. e/ f8 S+ {) T3 _
        }
. D8 M8 G7 r* o: J  Y! [        //2 RSA生成公钥文件的核心步骤3 e) A+ F7 p! i2 C) l1 x# \0 `
        //--1.生成公钥对象
) x7 [3 h- E+ W9 S( r        publickey := &privatekey.PublicKey
6 a6 v2 c/ Q9 v        //--2.将公钥对象转换为DER编码形式/ O- @' U  b: X% S$ m7 k
        derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)" O# S: J5 b' @* u0 Y: _3 Q
        if err != nil {
& K$ x2 d8 P3 W4 [, ?- ?4 E                return  err
0 ?* I9 E5 M! k. a. b2 X  p        }1 b/ @# n$ B( O1 X$ k
        //--3.创建公钥pem文件
2 `* e5 Y6 a) A, o        file,err = os.Create("./files/public.pem")
. {, d" O: F5 X        if err != nil {; V! Z/ T2 k5 a* ?: w; z3 O* k
                return  err
; K3 W% h2 q* ]3 C) n1 u! L: H        }
2 i, y# V8 b! s8 h4 q6 k2 {        //--4.对公钥信息进行编码,写入公钥文件中" C  x' Y2 l; ]! x/ R
        block = &pem.Block{- E3 h* e" j. @+ T5 ^
                Type:    "PUBLIC KEY",
6 \: V8 [, p% j$ I; E3 r/ I9 ]/ F                Bytes:   derpublicKey,
! T* m0 f, u# w5 _" q( v8 J+ a        }
; d3 j% {5 }, V1 p% t6 n$ {- D+ `        err = pem.Encode(file,block)
5 T, C8 w, G5 }" @/ g        if err != nil {
9 Q! `- L6 c* |/ z                return  err
% k- ^+ o8 m. c1 s" u        }) m. a; g/ P7 S' T8 H0 b3 |( U2 L
        return nil
& R5 }' k/ Q1 `6 ~}6 B% O0 [. e. [0 g
执行后,自动在files目录下生成加密过后的公私钥文件,如下
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    3