GO实现非对称加密--RSA生成公钥私钥
吃瓜围观小分队
发表于 2023-1-12 12:13:44
167
0
0
import (6 s" B; l" X3 I7 S* r9 f3 \7 h! l
"crypto/rand"$ u! O H3 ~: Z7 n
"crypto/rsa"8 D( Z9 r' Y) [4 v s
"crypto/x509"
"encoding/pem"
"flag"
"log" ^9 p" V& I$ i4 f2 D
"os"
)
func main() {
if err := GenerateRSAKey(); err != nil { ]5 n! l z1 ^+ U5 b" x
log.Fatal("密钥生成失败")
}- \7 u% v# b1 p( c! A% Y1 z$ w
log.Println("密钥生成成功")
}
func GenerateRSAKey() error {- A7 j" \5 u1 k
//1 RSA生成私钥文件步骤+ G0 e0 o* N+ Z# t) l: Q
//--1生成RSA私钥对7 K D( [! L% k9 i5 z1 V& E6 D
var bits int
flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")6 T- k& y8 }8 ^8 U
privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
if err != nil {
return err
}" f1 g" e. q: w' f+ u3 ^" h
//--2.将私钥对象转换为DER编码形式
derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)
//--3.创建私钥pem文件3 r) W4 q, m# A6 |$ V5 c( p
file,err := os.Create("./files/private.pem")
if err != nil {
return err
}9 K2 p" I0 x; B2 M$ q" x8 E
//--4.对私钥信息进行编码,写入到私钥文件中; F4 M6 M2 v) n7 I1 ~
block := &pem.Block{( c! T5 A, Q. l& O- _
Type: "RSA PRIVATE KEY",
Bytes: derPribateKey,
}
err = pem.Encode(file,block)
if err != nil {$ t! l$ Y @/ ~! G8 `8 |: `% J( P, b( M
return err0 m9 Q5 B" \7 \) \/ w* X# C
}+ T. i) d9 |! A [/ d. Z/ r3 q
//2 RSA生成公钥文件的核心步骤7 U( N5 P2 B8 w o( H$ m3 Q
//--1.生成公钥对象
publickey := &privatekey.PublicKey2 \( Z0 l5 A, a* r2 ?: H) G
//--2.将公钥对象转换为DER编码形式
derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)
if err != nil {
return err& E" V; p4 L- P- y, f! \0 i7 L8 [
}, {# i: t! F8 n" m/ e8 T2 X
//--3.创建公钥pem文件0 w z% Y& y( m. G% [$ j0 S
file,err = os.Create("./files/public.pem")+ e7 G4 s) R9 [+ I, ~3 X
if err != nil {
return err5 {2 X$ G0 f# G5 k
}
//--4.对公钥信息进行编码,写入公钥文件中* q! y! ?* `3 V; m
block = &pem.Block{) Z2 ~! W- ^' S+ Q* ?; Z& m( |
Type: "PUBLIC KEY",: k3 P; i% W' R
Bytes: derpublicKey,. R9 U3 ?6 {6 P5 q
}1 R3 H7 a x# u, T4 t; ^: k
err = pem.Encode(file,block)* j# C) s9 H% C P1 X6 K
if err != nil {! L) h8 T% f z! I
return err- }7 |( k. Q. g% X
}
return nil
}
执行后,自动在files目录下生成加密过后的公私钥文件,如下
成为第一个吐槽的人