GO实现非对称加密--RSA生成公钥私钥
吃瓜围观小分队
发表于 2023-1-12 12:13:44
270
0
0
import (+ d h* Y$ y: i8 y0 B2 e8 s
"crypto/rand") N8 P$ l$ s4 A/ O* k
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"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
)
func main() {3 L& z, s- {; `0 S
if err := GenerateRSAKey(); err != nil {; g0 j# h9 W, L/ ~$ ^
log.Fatal("密钥生成失败")
}# q( Z- l) w# }0 Z. V
log.Println("密钥生成成功")
}
func GenerateRSAKey() error {
//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
flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
if err != nil {
return err
}2 R" v. v' T( x/ w+ l; [/ q
//--2.将私钥对象转换为DER编码形式
derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)
//--3.创建私钥pem文件
file,err := os.Create("./files/private.pem")
if err != nil {
return err
}
//--4.对私钥信息进行编码,写入到私钥文件中0 I- l D6 T2 {$ n
block := &pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: derPribateKey,
}
err = pem.Encode(file,block)
if err != nil {
return err
}
//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)
if err != nil {; G! E* r6 h5 O' S' G1 H8 l
return err
}+ N. f1 n0 }* {& z* t% o
//--3.创建公钥pem文件2 i% _, j! Z2 F* n
file,err = os.Create("./files/public.pem")
if err != nil {
return err
}1 c% y$ K5 \# V& u) n8 D1 n
//--4.对公钥信息进行编码,写入公钥文件中
block = &pem.Block{2 N- X, z6 G c1 s2 `
Type: "PUBLIC KEY",
Bytes: derpublicKey,
}
err = pem.Encode(file,block)
if err != nil {
return err
}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目录下生成加密过后的公私钥文件,如下
成为第一个吐槽的人