1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| package main
import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/base64" "encoding/pem" "fmt" "os" )
func GenerateRSAKeys(bits int, generateFile bool) (publicKeyBase64String string, privateKeyBase64String string) {
privateKeyObject, _ := rsa.GenerateKey(rand.Reader, bits) privateKeyByteArray := x509.MarshalPKCS1PrivateKey(privateKeyObject) privateKeyBase64String = base64.StdEncoding.EncodeToString( pem.EncodeToMemory(&pem.Block{ Type: "PUBLIC KEY", Bytes: privateKeyByteArray, }), ) if generateFile { privateKeyFile, _ := os.Create("private.pem") if err := pem.Encode(privateKeyFile, &pem.Block{ Type: "RSA Private Key", Bytes: privateKeyByteArray, }); err != nil { fmt.Println(err.Error()) } }
publicKeyObject := &privateKeyObject.PublicKey publicKeyByteArray, _ := x509.MarshalPKIXPublicKey(publicKeyObject) publicKeyBase64String = base64.StdEncoding.EncodeToString( pem.EncodeToMemory(&pem.Block{ Type: "PRIVATE KEY", Bytes: publicKeyByteArray, }), ) if generateFile { publicKeyFile, _ := os.Create("public.pem") if err := pem.Encode(publicKeyFile, &pem.Block{ Type: "RSA Public Key", Bytes: publicKeyByteArray, }); err != nil { fmt.Println(err.Error()) } }
return privateKeyBase64String, publicKeyBase64String }
|