GO实现非对称加密--RSA生成公钥私钥
吃瓜围观小分队
发表于 2023-1-12 12:13:44
164
0
0
import (- }2 c1 v+ A. x2 g# P
"crypto/rand"0 V# {9 W, `0 y# ?, Z" {+ r
"crypto/rsa"( W$ Y o8 t% A7 D% _5 x! m
"crypto/x509"8 i6 u0 N! H% N9 W3 R6 c* V; k! E
"encoding/pem"
"flag"
"log"
"os"
)0 r0 a9 D& L+ r8 @" \; \5 J
func main() {
if err := GenerateRSAKey(); err != nil {
log.Fatal("密钥生成失败")( [ i+ ^% p! s# y) q
}
log.Println("密钥生成成功")) ^) Z# C9 U: [2 A4 x
}
func GenerateRSAKey() error {
//1 RSA生成私钥文件步骤
//--1生成RSA私钥对
var bits int M) j& M* [( k9 I6 H
flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
privatekey,err :=rsa.GenerateKey(rand.Reader,bits)1 Q7 v8 M- P$ T. G, r y* o
if err != nil {& n3 k% `2 g1 x, v1 L9 L
return err
}1 m, n/ ?: w" ~/ l ~; j
//--2.将私钥对象转换为DER编码形式
derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey), v8 x1 e0 L' r9 r6 D
//--3.创建私钥pem文件1 r/ u7 ]4 Y: B9 _% Z& d
file,err := os.Create("./files/private.pem")+ Q+ O+ g. [, f
if err != nil {& F/ C; F! g" @( ?! |
return err5 o/ V+ X* _& ]+ p% v
}
//--4.对私钥信息进行编码,写入到私钥文件中
block := &pem.Block{
Type: "RSA PRIVATE KEY",* F# N: G, a: i# [# _8 _3 ]
Bytes: derPribateKey,
}
err = pem.Encode(file,block)0 F" w3 h4 F+ d2 G& k5 `
if err != nil {
return err- x3 W. e/ f8 S+ {) T3 _
}
//2 RSA生成公钥文件的核心步骤3 e) A+ F7 p! i2 C) l1 x# \0 `
//--1.生成公钥对象
publickey := &privatekey.PublicKey
//--2.将公钥对象转换为DER编码形式/ O- @' U b: X% S$ m7 k
derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)" O# S: J5 b' @* u0 Y: _3 Q
if err != nil {
return err
}1 b/ @# n$ B( O1 X$ k
//--3.创建公钥pem文件
file,err = os.Create("./files/public.pem")
if err != nil {; V! Z/ T2 k5 a* ?: w; z3 O* k
return err
}
//--4.对公钥信息进行编码,写入公钥文件中" C x' Y2 l; ]! x/ R
block = &pem.Block{- E3 h* e" j. @+ T5 ^
Type: "PUBLIC KEY",
Bytes: derpublicKey,
}
err = pem.Encode(file,block)
if err != nil {
return err
}) m. a; g/ P7 S' T8 H0 b3 |( U2 L
return nil
}6 B% O0 [. e. [0 g
执行后,自动在files目录下生成加密过后的公私钥文件,如下
成为第一个吐槽的人