GO实现非对称加密--RSA生成公钥私钥
吃瓜围观小分队
发表于 2023-1-12 12:13:44
166
0
0
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"( w2 I) z6 W1 F: c
"flag"
"log"1 z( x) x% V c4 U6 _
"os"- S) k) z& n) R6 x
)
func main() {
if err := GenerateRSAKey(); err != nil {8 S F& i. o3 ]) D6 A% H* E& U
log.Fatal("密钥生成失败")4 \; r0 s# W' c& ]: i8 X' {
}
log.Println("密钥生成成功")
}4 r$ ~7 N4 X1 b
func GenerateRSAKey() error {
//1 RSA生成私钥文件步骤
//--1生成RSA私钥对2 @2 D, o) K0 e5 I8 k9 ~
var bits int
flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
privatekey,err :=rsa.GenerateKey(rand.Reader,bits)7 t0 c! s z7 m1 u
if err != nil {
return err
}
//--2.将私钥对象转换为DER编码形式) n- F7 D* d2 ]; F3 k
derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey), h3 z& P. e) I5 W( w' t* d
//--3.创建私钥pem文件6 S5 W& Z$ B4 v( Y& h1 F
file,err := os.Create("./files/private.pem")
if err != nil {
return err) d! t9 J. I" R t( X+ \ F
}
//--4.对私钥信息进行编码,写入到私钥文件中
block := &pem.Block{7 N- t5 a; I! p B* b+ [
Type: "RSA PRIVATE KEY",
Bytes: derPribateKey,( j8 j- ~5 K# t% U3 i" V6 X
}
err = pem.Encode(file,block)/ \& F: q' I7 q- K3 B, ~# m
if err != nil {
return err
}; `; Y* F2 L! [
//2 RSA生成公钥文件的核心步骤( z0 o. ^4 q# k
//--1.生成公钥对象
publickey := &privatekey.PublicKey
//--2.将公钥对象转换为DER编码形式) [. ?) c l9 C Y! j5 E
derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)
if err != nil {
return err- R q+ y& y. K* d) ~/ J% W4 q
}
//--3.创建公钥pem文件
file,err = os.Create("./files/public.pem")& v9 W, M( f0 r& P x, n3 O3 E
if err != nil {
return err
}9 s7 | c) P a: a# M" q3 b* L. Q5 s
//--4.对公钥信息进行编码,写入公钥文件中* k4 q& b9 T* [7 l
block = &pem.Block{
Type: "PUBLIC KEY",
Bytes: derpublicKey,( K$ m+ x* Z$ [& ^0 w6 h
}
err = pem.Encode(file,block)
if err != nil {
return err \" @# u0 R; b! V% {! @7 Q
}/ k' d! A/ B2 C" c3 ^$ I
return nil1 n4 C5 Z' _% G
}4 K/ T; t2 o" W- `6 w x B" e. j/ t
执行后,自动在files目录下生成加密过后的公私钥文件,如下
成为第一个吐槽的人