GO实现非对称加密--RSA生成公钥私钥
吃瓜围观小分队
发表于 2023-1-12 12:13:44
165
0
0
import (' i4 t) V" q8 K+ H/ K. N' y0 Q
"crypto/rand"5 v+ Q/ y% J( z0 P( e9 R. o# l
"crypto/rsa"
"crypto/x509"& V) [/ ]+ P1 Z; t/ M" z& ^
"encoding/pem"+ w$ F, J# G! N# j5 S% s3 B
"flag"$ ?; \" [& ]) ^' n
"log"
"os") S- t' s$ k3 h, b8 G- d# Q2 X4 ?
)
func main() {
if err := GenerateRSAKey(); err != nil {
log.Fatal("密钥生成失败")$ I+ C8 l3 P: |2 G, j$ D
}
log.Println("密钥生成成功")
}4 n! a2 `# c5 ]# O2 `- r
func GenerateRSAKey() error {
//1 RSA生成私钥文件步骤
//--1生成RSA私钥对 P- g/ @" R& j8 J! A& S
var bits int
flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
privatekey,err :=rsa.GenerateKey(rand.Reader,bits)2 G* \ ]. J' m: k7 p8 X
if err != nil {
return err) k, D% @9 p6 ~3 h1 T
}& Z3 m Y& V& U4 `! e+ q
//--2.将私钥对象转换为DER编码形式
derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)" F. I) P5 t+ H0 E3 Y; d% M
//--3.创建私钥pem文件+ g& } {( D, w7 a7 g5 P1 s
file,err := os.Create("./files/private.pem")1 x/ {- W( U- d
if err != nil {% Z( D7 M7 L7 D0 n0 b8 A4 \4 r" n
return err
}( r% J: J# e) b) I# e4 H" z
//--4.对私钥信息进行编码,写入到私钥文件中) S. |6 h5 a, V0 K' I/ N/ \
block := &pem.Block{
Type: "RSA PRIVATE KEY",' g& v* e9 p+ x2 T! K! x
Bytes: derPribateKey,
}8 H( j" F* Z% ` i! c2 X
err = pem.Encode(file,block)
if err != nil {" E% I8 L" O- {0 }. t# H- y
return err
}
//2 RSA生成公钥文件的核心步骤
//--1.生成公钥对象
publickey := &privatekey.PublicKey
//--2.将公钥对象转换为DER编码形式
derpublicKey,err := x509.MarshalPKIXPublicKey(publickey). b/ v9 {4 X" E7 ?7 E- U: o! J
if err != nil {. [$ C7 K3 l6 Z8 R4 n
return err
}7 ]7 N' z9 g% r3 r% c& n
//--3.创建公钥pem文件
file,err = os.Create("./files/public.pem")( [4 _3 ~( b7 F* f+ V' s+ }( S
if err != nil {
return err
}
//--4.对公钥信息进行编码,写入公钥文件中
block = &pem.Block{
Type: "PUBLIC KEY",- H( z( P9 s6 K' o) r
Bytes: derpublicKey,
}
err = pem.Encode(file,block)6 t; i8 }& v1 o
if err != nil {
return err. e' G( n1 z" Y5 ~
}: {5 ]! w8 m8 z. Q5 O# Q, M: A
return nil
}
执行后,自动在files目录下生成加密过后的公私钥文件,如下
成为第一个吐槽的人