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
|
package main
import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/gob" "encoding/pem" "fmt" "os" )
func main() { reader := rand.Reader bitSize := 512 key, err := rsa.GenerateKey(reader, bitSize) checkError(err)
fmt.Println("Private key primes", key.Primes[0].String(), key.Primes[1].String()) fmt.Println("Private key exponent", key.D.String())
publicKey := key.PublicKey fmt.Println("Public key modulus", publicKey.N.String()) fmt.Println("Public key exponent", publicKey.E)
saveGobKey("private.key", key) saveGobKey("public.key", publicKey)
savePEMKey("private.pem", key) }
func saveGobKey(fileName string, key interface{}) { outFile, err := os.Create(fileName) checkError(err) encoder := gob.NewEncoder(outFile) err = encoder.Encode(key) checkError(err) outFile.Close() }
func savePEMKey(fileName string, key *rsa.PrivateKey) {
outFile, err := os.Create(fileName) checkError(err)
var privateKey = &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)}
pem.Encode(outFile, privateKey)
outFile.Close() }
func checkError(err error) { if err != nil { fmt.Println("Fatal error ", err.Error()) os.Exit(1) } }
|