GO实现非对称加密--RSA生成公钥私钥
吃瓜围观小分队
发表于 2023-1-12 12:13:44
212
0
0
import (6 m; S) o s; h) x% E1 N8 r
"crypto/rand"
"crypto/rsa"
"crypto/x509"3 } q) U2 l% a3 C# J x% q
"encoding/pem", D, _+ \; ~0 n% [
"flag"
"log"
"os"
) ?3 x2 F/ _ t3 T" I
func main() {
if err := GenerateRSAKey(); err != nil {
log.Fatal("密钥生成失败")
}
log.Println("密钥生成成功")
}) ], E2 K5 `. X8 Y
func GenerateRSAKey() error {
//1 RSA生成私钥文件步骤" J: n9 n1 |* J& p4 o2 z- \ U
//--1生成RSA私钥对5 i$ D0 _$ D! z) G2 H( s
var bits int- ~7 ]4 D% |+ y" v2 u
flag.IntVar(&bits,"key flag",1024,"密钥长度,默认值位1024")$ b/ J) z8 A3 t" E8 W# H% l
privatekey,err :=rsa.GenerateKey(rand.Reader,bits)
if err != nil {; `. v' U$ c$ p7 D" ~0 f- k
return err
}
//--2.将私钥对象转换为DER编码形式6 l. z$ m2 o+ B4 K# W9 X$ E' I7 M
derPribateKey := x509.MarshalPKCS1PrivateKey(privatekey)- s% S* z+ m8 T. z6 b. U
//--3.创建私钥pem文件+ l/ j/ X7 ], z, q
file,err := os.Create("./files/private.pem"). D9 z. t: }: H$ j
if err != nil {
return err" B% H* c7 f4 F, a: L8 P/ W& ^/ m
}& N& ~* j. h$ g7 l
//--4.对私钥信息进行编码,写入到私钥文件中) |/ e2 l2 |5 `0 n
block := &pem.Block{
Type: "RSA PRIVATE KEY",1 P0 v7 G: ~* c
Bytes: derPribateKey,
}
err = pem.Encode(file,block)7 C+ f9 u$ W8 w
if err != nil {
return err
}9 V3 W @% F. D7 Y+ _. m
//2 RSA生成公钥文件的核心步骤
//--1.生成公钥对象
publickey := &privatekey.PublicKey' r( G2 m8 j0 w- t: m* o
//--2.将公钥对象转换为DER编码形式- R2 | B' A ?# L8 A. A
derpublicKey,err := x509.MarshalPKIXPublicKey(publickey)
if err != nil {
return err" t+ }+ e# T+ X! v
}
//--3.创建公钥pem文件
file,err = os.Create("./files/public.pem") j- z9 |1 w9 f3 x8 h
if err != nil {' R- `6 |2 _+ V0 [6 e
return err# a2 |0 p" x1 a; T+ {
}* X% s! T7 Z" L2 {. Y
//--4.对公钥信息进行编码,写入公钥文件中0 F! r* E! y H a- u( H
block = &pem.Block{
Type: "PUBLIC KEY",
Bytes: derpublicKey,/ [7 n9 m% {' P6 V
}
err = pem.Encode(file,block)
if err != nil {2 h# u% h8 V4 x8 a
return err
}
return nil
}+ Q0 }% S5 y" K* R. B
执行后,自动在files目录下生成加密过后的公私钥文件,如下
成为第一个吐槽的人