GO实现非对称加密--RSA生成公钥私钥
吃瓜围观小分队
发表于 2023-1-12 12:13:44
168
0
0
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"" P9 A$ s' D" p* a+ B, y
"encoding/pem"
"flag"
"log"
"os"' p0 z9 n q0 \. \( S. S4 [
)2 O0 a& G9 j0 ~$ E" G
func main() {
if err := GenerateRSAKey(); err != nil {
log.Fatal("密钥生成失败")
}$ w3 A# E" V* q5 Z4 I8 j9 Z; h1 Y
log.Println("密钥生成成功"); j- {" H. p7 M3 d' f
}
func GenerateRSAKey() error {5 d& j+ i' E1 S8 l; w) y1 [7 R
//1 RSA生成私钥文件步骤
//--1生成RSA私钥对
var bits int( d, w2 A" [' n' X4 O; s. w
flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")
privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
if err != nil { J A9 V- F" l3 S9 q0 b9 g
return err
}6 F- Z. e7 M/ |: |" t2 y
//--2.将私钥对象转换为DER编码形式
derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)
//--3.创建私钥pem文件8 }$ R: ?# N( t. A- M1 J/ j/ ]
file,err := os.Create("./files/private.pem")
if err != nil {: B* k' v1 n q( O
return err
}/ M$ s7 p& ?4 A' P2 S i
//--4.对私钥信息进行编码,写入到私钥文件中( L$ o! h* i. m) `( e/ f
block := &pem.Block{6 v B* L5 n9 }: W
Type: "RSA PRIVATE KEY",
Bytes: derPribateKey,
}
err = pem.Encode(file,block)
if err != nil {/ k! x0 ]& J9 ^( Y
return err
}& P* t4 ~3 V1 K, c0 j
//2 RSA生成公钥文件的核心步骤
//--1.生成公钥对象
publickey := &privatekey.PublicKey
//--2.将公钥对象转换为DER编码形式
derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)9 V/ i& `$ P& H2 v0 S
if err != nil {! A, T; N9 A. |$ S3 U4 r( L* A
return err$ F/ s& W- b8 K3 ?4 e' b7 Q
}
//--3.创建公钥pem文件3 B8 J( Q9 b- x7 Q, }
file,err = os.Create("./files/public.pem"), O2 ^$ @6 I4 O/ x R' Y* Z
if err != nil {
return err% o# \. K5 A, L$ w: q
}; ` q$ V: b( t9 G$ f
//--4.对公钥信息进行编码,写入公钥文件中 f( B4 `2 I' s( _2 U- d5 o& {5 y
block = &pem.Block{- w# v% o) ^# t5 J7 F5 n% P
Type: "PUBLIC KEY",# m6 {1 I' b2 M# X
Bytes: derpublicKey,
}6 x& W) C- B. C, f& }6 A1 y* s: `
err = pem.Encode(file,block)
if err != nil {" G* r# r" A/ V
return err- V0 W' T2 Y# d' ?/ I
}
return nil: f& O" U. ~9 V4 H) q1 n3 q
}
执行后,自动在files目录下生成加密过后的公私钥文件,如下
成为第一个吐槽的人