GO实现非对称加密--RSA生成公钥私钥
吃瓜围观小分队
发表于 2023-1-12 12:13:44
269
0
0
import (7 f9 X; @. w' ]/ G- t8 |6 t
"crypto/rand"5 w( b$ Q# l3 L. W3 J: }3 E. i
"crypto/rsa"
"crypto/x509"$ R+ z/ b4 u: B( ~
"encoding/pem"
"flag"+ R8 e3 x. N4 l7 Z+ ~
"log"
"os"7 a' r' L6 l6 z6 N: _- p7 z s! V3 `
)
func main() {
if err := GenerateRSAKey(); err != nil {* N$ Y9 z0 Q1 M1 ~$ c6 X
log.Fatal("密钥生成失败")
}
log.Println("密钥生成成功")9 }+ c( D, n# R" K1 @' a
}
func GenerateRSAKey() error {
//1 RSA生成私钥文件步骤
//--1生成RSA私钥对; O) n& I+ [, D' h* f2 o# i
var bits int
flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")- d" W1 \2 G4 G/ m" d
privatekey,err :=rsa.GenerateKey(rand.Reader,bits)9 l4 M$ A+ p& S, T
if err != nil {
return err
}
//--2.将私钥对象转换为DER编码形式
derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)3 l3 k b# \8 G3 Q
//--3.创建私钥pem文件$ Y4 B% H/ \; E$ M) V2 L
file,err := os.Create("./files/private.pem")
if err != nil {& \# k0 {4 E: F- K
return err
}
//--4.对私钥信息进行编码,写入到私钥文件中7 o5 D) z! `- e# G0 u# g
block := &pem.Block{& k+ n& q/ c+ _8 g- s& \
Type: "RSA PRIVATE KEY",
Bytes: derPribateKey,
}
err = pem.Encode(file,block)2 i2 O' j' R+ y" k2 ~
if err != nil {2 `9 A( Z3 i# k( D1 B2 t. M
return err
}
//2 RSA生成公钥文件的核心步骤& ?3 w4 \2 h: B. K
//--1.生成公钥对象( a* k5 y5 Q; f3 y7 X. k
publickey := &privatekey.PublicKey( t1 X- e- m6 u& M
//--2.将公钥对象转换为DER编码形式0 M, W. B$ ?4 @+ l) w
derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)
if err != nil {% W$ a1 E# F+ f1 J$ {
return err& J b( o) ?( y, ^6 y) h5 r! r
}
//--3.创建公钥pem文件+ Z( a8 Y4 P* i/ r. b# O, l: w
file,err = os.Create("./files/public.pem")
if err != nil {
return err
}
//--4.对公钥信息进行编码,写入公钥文件中$ o c% W# b" y% t4 m
block = &pem.Block{
Type: "PUBLIC KEY",
Bytes: derpublicKey,' V6 F" C, e! o) Y) \
}
err = pem.Encode(file,block)3 h: k5 T& ] `2 q0 P
if err != nil {# D' J) W3 I+ R5 A4 x
return err& R) A9 M4 D$ ^+ ~
}# N1 O1 e# ^) y/ N8 s2 ~
return nil
}
执行后,自动在files目录下生成加密过后的公私钥文件,如下
成为第一个吐槽的人