GO实现非对称加密--RSA生成公钥私钥
吃瓜围观小分队
发表于 2023-1-12 12:13:44
258
0
0
import (1 a0 b4 p) @4 [# G" d5 w; g
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"flag"7 {- y4 {. m/ ?
"log"
"os"7 S0 t! f7 j f! ]+ N
) s( ^' q, U: }9 Q5 } k: W
func main() {
if err := GenerateRSAKey(); err != nil {6 L0 D7 ~$ D8 A7 B; e* k
log.Fatal("密钥生成失败")
}
log.Println("密钥生成成功")
}; ^ A8 e& a6 q# q7 M
func GenerateRSAKey() error {
//1 RSA生成私钥文件步骤% K! l( J/ j: ^2 V8 ] `
//--1生成RSA私钥对7 [: Y/ f3 O' f+ \$ H9 x
var bits int
flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
if err != nil {
return err8 J# B" a) D; @ M/ R" I
}
//--2.将私钥对象转换为DER编码形式
derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)1 B* b5 P3 `8 Z/ k) u3 c
//--3.创建私钥pem文件$ V' w% R; m9 T
file,err := os.Create("./files/private.pem"). t& ?6 O9 |1 p; e* \$ r
if err != nil {
return err* l' X H; k8 Q7 C
}) _7 Y: Q. _: t# x. m6 Q
//--4.对私钥信息进行编码,写入到私钥文件中5 G6 F9 V+ P4 Y; J ^' u6 }
block := &pem.Block{ {- }( L ?* o3 h1 N7 [# B# B# ?
Type: "RSA PRIVATE KEY",( a3 j6 E+ L* z+ m/ {3 ]; S: \
Bytes: derPribateKey,
}
err = pem.Encode(file,block)9 N8 o8 H" J9 g, m! \
if err != nil {
return err
}/ f3 p0 ?6 t, H# v+ `6 P
//2 RSA生成公钥文件的核心步骤
//--1.生成公钥对象3 } L( E/ `' z
publickey := &privatekey.PublicKey
//--2.将公钥对象转换为DER编码形式
derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)+ B0 N- u: d* t @! x: D
if err != nil {
return err, j0 g" i) A0 S6 Q+ t- e0 r0 B
}1 r8 ]! w6 l- g' I" U) L# _# @
//--3.创建公钥pem文件5 f, c$ I% x; z
file,err = os.Create("./files/public.pem") ?4 _0 M% n, k" j' O+ {
if err != nil {
return err
}( n" b0 h" A y1 o
//--4.对公钥信息进行编码,写入公钥文件中, {0 p& o! J5 r
block = &pem.Block{/ q8 e7 v9 `3 U
Type: "PUBLIC KEY",9 ~; \$ I( j$ p/ z3 ]+ L0 m
Bytes: derpublicKey,9 Z; o0 D, j1 i3 |
}
err = pem.Encode(file,block)
if err != nil {2 X7 i( X! F6 X( g2 N: n
return err
}( H1 }9 U- A: h" w7 u* Y9 @
return nil
}
执行后,自动在files目录下生成加密过后的公私钥文件,如下
成为第一个吐槽的人