Golang📌应用📌加密算法📌6-genkey.go
package crypt
import (
"crypto/ecdsa"
"crypto/ed25519"
"crypto/elliptic"
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/base64"
"encoding/pem"
"fmt"
)
const format = "%s\n%s\n"
func der2pem(b []byte, t string) []byte {
return pem.EncodeToMemory(&pem.Block{
Type: t,
Bytes: b,
})
}
func GenerateRsaKey(multiple int) {
key, _ := rsa.GenerateKey(rand.Reader, 1024*(multiple&3+1))
priDer1 := x509.MarshalPKCS1PrivateKey(key)
priDer8, _ := x509.MarshalPKCS8PrivateKey(key)
pubDer1 := x509.MarshalPKCS1PublicKey(&key.PublicKey)
pubDer8, _ := x509.MarshalPKIXPublicKey(&key.PublicKey)
fmt.Printf(format, "pkcs1 private row:", base64.StdEncoding.EncodeToString(priDer1))
fmt.Printf(format, "pkcs1 private pem:", der2pem(priDer1, "RSA PRIVATE KEY"))
fmt.Printf(format, "pkcs8 private row:", base64.StdEncoding.EncodeToString(priDer8))
fmt.Printf(format, "pkcs8 private pem:", der2pem(priDer8, "PRIVATE KEY"))
fmt.Printf(format, "pkcs1 public row:", base64.StdEncoding.EncodeToString(pubDer1))
fmt.Printf(format, "pkcs1 public pem:", der2pem(pubDer1, "RSA PUBLIC KEY"))
fmt.Printf(format, "pkcs8 public row:", base64.StdEncoding.EncodeToString(pubDer8))
fmt.Printf(format, "pkcs8 public pem:", der2pem(pubDer8, "PUBLIC KEY"))
}
func GenerateEcdsaKey(p int) {
var key *ecdsa.PrivateKey
switch p {
case 224:
key, _ = ecdsa.GenerateKey(elliptic.P224(), rand.Reader)
case 256:
key, _ = ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
case 384:
key, _ = ecdsa.GenerateKey(elliptic.P384(), rand.Reader)
default:
key, _ = ecdsa.GenerateKey(elliptic.P521(), rand.Reader)
}
priDer, _ := x509.MarshalPKCS8PrivateKey(key)
pubDer, _ := x509.MarshalPKIXPublicKey(&key.PublicKey)
fmt.Printf(format, "ecdsa private row:", base64.StdEncoding.EncodeToString(priDer))
fmt.Printf(format, "ecdsa private pem:", der2pem(priDer, "PRIVATE KEY"))
fmt.Printf(format, "ecdsa public row:", base64.StdEncoding.EncodeToString(pubDer))
fmt.Printf(format, "ecdsa public pem:", der2pem(pubDer, "PUBLIC KEY"))
}
func GenerateEd25519Key() {
pub, pri, _ := ed25519.GenerateKey(rand.Reader)
priDer, _ := x509.MarshalPKCS8PrivateKey(pri)
pubDer, _ := x509.MarshalPKIXPublicKey(pub)
fmt.Printf(format, "ed25519 private row:", base64.StdEncoding.EncodeToString(priDer))
fmt.Printf(format, "ed25519 public row:", base64.StdEncoding.EncodeToString(pubDer))
}