parent
5d00d1987b
commit
e9288ee253
@ -0,0 +1,76 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"crypto/rand" |
||||||
|
"crypto/rsa" |
||||||
|
"crypto/x509" |
||||||
|
"encoding/asn1" |
||||||
|
"encoding/gob" |
||||||
|
"encoding/pem" |
||||||
|
"fmt" |
||||||
|
"os" |
||||||
|
) |
||||||
|
|
||||||
|
func main() { |
||||||
|
reader := rand.Reader |
||||||
|
bitSize := 2048 |
||||||
|
|
||||||
|
key, err := rsa.GenerateKey(reader, bitSize) |
||||||
|
checkError(err) |
||||||
|
|
||||||
|
publicKey := key.PublicKey |
||||||
|
|
||||||
|
saveGobKey("private.key", key) |
||||||
|
savePEMKey("private.pem", key) |
||||||
|
|
||||||
|
saveGobKey("public.key", publicKey) |
||||||
|
savePublicPEMKey("public.pem", publicKey) |
||||||
|
} |
||||||
|
|
||||||
|
func saveGobKey(fileName string, key interface{}) { |
||||||
|
outFile, err := os.Create(fileName) |
||||||
|
checkError(err) |
||||||
|
defer outFile.Close() |
||||||
|
|
||||||
|
encoder := gob.NewEncoder(outFile) |
||||||
|
err = encoder.Encode(key) |
||||||
|
checkError(err) |
||||||
|
} |
||||||
|
|
||||||
|
func savePEMKey(fileName string, key *rsa.PrivateKey) { |
||||||
|
outFile, err := os.Create(fileName) |
||||||
|
checkError(err) |
||||||
|
defer outFile.Close() |
||||||
|
|
||||||
|
var privateKey = &pem.Block{ |
||||||
|
Type: "PRIVATE KEY", |
||||||
|
Bytes: x509.MarshalPKCS1PrivateKey(key), |
||||||
|
} |
||||||
|
|
||||||
|
err = pem.Encode(outFile, privateKey) |
||||||
|
checkError(err) |
||||||
|
} |
||||||
|
|
||||||
|
func savePublicPEMKey(fileName string, pubkey rsa.PublicKey) { |
||||||
|
asn1Bytes, err := asn1.Marshal(pubkey) |
||||||
|
checkError(err) |
||||||
|
|
||||||
|
var pemkey = &pem.Block{ |
||||||
|
Type: "PUBLIC KEY", |
||||||
|
Bytes: asn1Bytes, |
||||||
|
} |
||||||
|
|
||||||
|
pemfile, err := os.Create(fileName) |
||||||
|
checkError(err) |
||||||
|
defer pemfile.Close() |
||||||
|
|
||||||
|
err = pem.Encode(pemfile, pemkey) |
||||||
|
checkError(err) |
||||||
|
} |
||||||
|
|
||||||
|
func checkError(err error) { |
||||||
|
if err != nil { |
||||||
|
fmt.Println("Fatal error ", err.Error()) |
||||||
|
os.Exit(1) |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue