based on https://github.com/wenzhenxi/gorsa Optimized the following points for packaging:
- Optimization of public and private keys requires registration and initialization in advance.
- The encryption machine does not perform base64 processing, and avoids secondary encapsulation of base64 during cross-program transfer or storage
- The incoming return uses the string type uniformly to avoid conversion trouble
- Supports RSAWithSHA1 and RSAWithSHA256 signature verification algorithms
Get expansion pack:
go get github.com/OSMeteor/gorsa
Specific use:
package main
import (
"errors"
"fmt"
"io/ioutil"
"log"
"github.com/OSMeteor/gorsa"
)
func main() {
Pubkey, publicKeyErr := gorsa.ReadSslFileToStr("server.crt")
if publicKeyErr != nil {
fmt.Println("---->", publicKeyErr)
}
Pirvatekey, privateKeyErr := gorsa.ReadSslFileToStr("server.key")
if privateKeyErr != nil {
fmt.Println("----1>", privateKeyErr)
}
// Pubkey := `-----BEGIN Public key-----
// MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk+89V7vpOj1rG6bTAKYM
// 56qmFLwNCBVDJ3MltVVtxVUUByqc5b6u909MmmrLBqS//PWC6zc3wZzU1+ayh8xb
// UAEZuA3EjlPHIaFIVIz04RaW10+1xnby/RQE23tDqsv9a2jv/axjE/27b62nzvCW
// eItu1kNQ3MGdcuqKjke+LKhQ7nWPRCOd/ffVqSuRvG0YfUEkOz/6UpsPr6vrI331
// hWRB4DlYy8qFUmDsyvvExe4NjZWblXCqkEXRRAhi2SQRCl3teGuIHtDUxCskRIDi
// aMD+Qt2Yp+Vvbz6hUiqIWSIH1BoHJer/JOq2/O6X3cmuppU4AdVNgy8Bq236iXvr
// MQIDAQAB
// -----END Public key-----
// `
// Pirvatekey := `-----BEGIN Private key-----
// MIIEpAIBAAKCAQEAk+89V7vpOj1rG6bTAKYM56qmFLwNCBVDJ3MltVVtxVUUByqc
// 5b6u909MmmrLBqS//PWC6zc3wZzU1+ayh8xbUAEZuA3EjlPHIaFIVIz04RaW10+1
// xnby/RQE23tDqsv9a2jv/axjE/27b62nzvCWeItu1kNQ3MGdcuqKjke+LKhQ7nWP
// RCOd/ffVqSuRvG0YfUEkOz/6UpsPr6vrI331hWRB4DlYy8qFUmDsyvvExe4NjZWb
// lXCqkEXRRAhi2SQRCl3teGuIHtDUxCskRIDiaMD+Qt2Yp+Vvbz6hUiqIWSIH1BoH
// Jer/JOq2/O6X3cmuppU4AdVNgy8Bq236iXvrMQIDAQABAoIBAQCCbxZvHMfvCeg+
// YUD5+W63dMcq0QPMdLLZPbWpxMEclH8sMm5UQ2SRueGY5UBNg0WkC/R64BzRIS6p
// jkcrZQu95rp+heUgeM3C4SmdIwtmyzwEa8uiSY7Fhbkiq/Rly6aN5eB0kmJpZfa1
// 6S9kTszdTFNVp9TMUAo7IIE6IheT1x0WcX7aOWVqp9MDXBHV5T0Tvt8vFrPTldFg
// IuK45t3tr83tDcx53uC8cL5Ui8leWQjPh4BgdhJ3/MGTDWg+LW2vlAb4x+aLcDJM
// CH6Rcb1b8hs9iLTDkdVw9KirYQH5mbACXZyDEaqj1I2KamJIU2qDuTnKxNoc96HY
// 2XMuSndhAoGBAMPwJuPuZqioJfNyS99x++ZTcVVwGRAbEvTvh6jPSGA0k3cYKgWR
// NnssMkHBzZa0p3/NmSwWc7LiL8whEFUDAp2ntvfPVJ19Xvm71gNUyCQ/hojqIAXy
// tsNT1gBUTCMtFZmAkUsjqdM/hUnJMM9zH+w4lt5QM2y/YkCThoI65BVbAoGBAMFI
// GsIbnJDNhVap7HfWcYmGOlWgEEEchG6Uq6Lbai9T8c7xMSFc6DQiNMmQUAlgDaMV
// b6izPK4KGQaXMFt5h7hekZgkbxCKBd9xsLM72bWhM/nd/HkZdHQqrNAPFhY6/S8C
// IjRnRfdhsjBIA8K73yiUCsQlHAauGfPzdHET8ktjAoGAQdxeZi1DapuirhMUN9Zr
// kr8nkE1uz0AafiRpmC+cp2Hk05pWvapTAtIXTo0jWu38g3QLcYtWdqGa6WWPxNOP
// NIkkcmXJjmqO2yjtRg9gevazdSAlhXpRPpTWkSPEt+o2oXNa40PomK54UhYDhyeu
// akuXQsD4mCw4jXZJN0suUZMCgYAgzpBcKjulCH19fFI69RdIdJQqPIUFyEViT7Hi
// bsPTTLham+3u78oqLzQukmRDcx5ddCIDzIicMfKVf8whertivAqSfHytnf/pMW8A
// vUPy5G3iF5/nHj76CNRUbHsfQtv+wqnzoyPpHZgVQeQBhcoXJSm+qV3cdGjLU6OM
// HgqeaQKBgQCnmL5SX7GSAeB0rSNugPp2GezAQj0H4OCc8kNrHK8RUvXIU9B2zKA2
// z/QUKFb1gIGcKxYr+LqQ25/+TGvINjuf6P3fVkHL0U8jOG0IqpPJXO3Vl9B8ewWL
// cFQVB/nQfmaMa4ChK0QEUe+Mqi++MwgYbRHx1lIOXEfUJO+PXrMekw==
// -----END Private key-----
// `
// Public key encryption private key decryption
if err := applyPubEPriD(Pubkey, Pirvatekey); err != nil {
log.Println(err)
}
// Public key decryption private key encryption
if err := applyPriEPubD(Pubkey, Pirvatekey); err != nil {
log.Println(err)
}
}
// Public key encryption private key decryption
func applyPubEPriD(Pubkey, Pirvatekey string) error {
pubenctypt, err := gorsa.PublicEncrypt(`hello world`, Pubkey)
if err != nil {
return err
}
fmt.Println("Public key encryption: ", pubenctypt)
pridecrypt, err := gorsa.PriKeyDecrypt(pubenctypt, Pirvatekey)
if err != nil {
return err
}
fmt.Println("private key decryption: ", pridecrypt)
if pridecrypt != `hello world` {
return errors.New(`Decryption failed`)
}
return nil
}
// Public key decryption private key encryption
func applyPriEPubD(Pubkey, Pirvatekey string) error {
prienctypt, err := gorsa.PriKeyEncrypt(`hello world`, Pirvatekey)
if err != nil {
return err
}
fmt.Println("private key encryption: ", prienctypt)
pubdecrypt, err := gorsa.PublicDecrypt(prienctypt, Pubkey)
if err != nil {
return err
}
fmt.Println("Public key decryption: ", pubdecrypt)
if pubdecrypt != `hello world` {
return errors.New(`Decryption failed`)
}
return nil
}