Skip to content

Instantly share code, notes, and snippets.

@m-moris
Created July 30, 2021 02:34
Show Gist options
  • Save m-moris/a0011174af209e0e03b33099901dbd7f to your computer and use it in GitHub Desktop.
Save m-moris/a0011174af209e0e03b33099901dbd7f to your computer and use it in GitHub Desktop.
RSA Encryption Decryption example
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/sha512"
"crypto/x509"
"encoding/base64"
"encoding/pem"
"fmt"
)
var privateKey = []byte(`
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCRlQKXZwx0Fbx1NKxdacQvnpNwvDRcAehWa3FdkFQiizIO/kA19ClN/Tndm9kC6TwJIn8UuDzerY39v2yfaVMHLDbuvNoflmKB8idxxjwUz+YV6UrVzXtgozeSU78/tzZgxLLPM4HOXp05+wo2RgtzVgdGHxENLGSgV+X8tS+Dl1RuzzAn0MASnFZhCHk3g0a5vY4K9sOuNNXSrzU2ooHn/j+q3ZXtU77uVMElhUfo2OL17zC7SSW6UXcwij7aEEhGcpfJZfBEs2Bt5iQ4nDzZSsEQVIIv8TzXW+LH6qdgo1FXpPX1cNUDMpsVDzgA3FioI95raoSoUPzGd0q1UEnDAgMBAAECggEBAIYNCZfUAXma0i+yUsypKUcX43e5NRVLhF6fDII09ePg/DUmFIYZzzbK50+Rw9+UV/2pUA8KHrKEaOywKRsYZqWCJwrpxoezd/1jtsJi4MvhK2IdsRTx4pt3byJEDyRiVaYBOQzlxq76HBhZemvDT6PiIUyGKrNQn0+t4E4zoA6wEiNa79zuJ8jdFRGkGsglpFjA4A8N1J/mfpCG9LzBhXAi5uOBZEUlkNkMRRZCMBBxqm8pXJmVhOgRr7pLwYHAEdWlAMrj+cN/8h5iRatsgVNFN7Na4VzbYST88fNnIROZCZHv8AlPKa2YYBimBbSaKRVMHYLvDS1a559DPv61hiECgYEA1zsVuFI5Nt6cCzvyBzUsdt0y18sgf+AuWm+RuQb9HN1aGi7/sKDT/pVAAFUZ2RCfk+pnsZjL3tp2qcbOwVReoUgQgR2GPt23J8V5rJjs8eWhbmhRJse2W20gOAiY676RGNf2jimwMF0WqT+vk+rQ97yNG7g4Vs9aF9yWcAezlesCgYEArSiJmAqtxUKKLIWGYwZMrfKYmx3U+gIw8chg7Brq5evQ3zKCaMeGC/vd28Z8zJg6JR69JQA4aCbq5e7a26Z87GoQTjX0SlPUJIGL5tsKeLWLdk4rVSE6tfknC7+ChCixWWoDoaVSUPSZIiXZAkcAAsVnbDBDI5I4mg4RsqYgbYkCgYBbzCeHZgphDLEhWX/w8wzz5YQ55bkG0Wbzy4IrmH98QCyd3k3P18iTXLTfb2yG2EA3plJzvOe3NRZHczPb4VA7GbFwYFdRmN71Z5RtuQvWYEpp/LQgBi4Q8Io9W+1dHvpjzjiqib1L42g256LLQ+u8vf6xQ/FDlUynwL2pKp+94QKBgCv3Hvh7vaNYQb0MKhL6hn2kGxtHd8wCwmqhdfp82yeFuILzUClKf76LNMmYnBdWj2zdYSkD5U6MkxfOjcM3goCEbZ9uE5jLsBGU0vDKrN35Om/PaTE0PrP1jvRsq7biniUVxdZFI6FqeXcyJOdvH5GUja3qkyF0/uoeqF+zzogBAoGAXMDe6p1/JMYhWr29KEkerLA2V/8V03SRuuMekItJmil1HDPMpCGEbWMChuFvDufdFLiWBMa/C+48ftkBDTJyaf5yAOkfE8mliRDrLkrW0jCadGEX7Xu3yB21/SOq/frg0ftgvSbApJmT3x6nOsfbyzlTdksyCqZ9WgGrSOPQzPQ=
-----END PRIVATE KEY-----
`)
var publicKey = []byte(`
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkZUCl2cMdBW8dTSsXWnEL56TcLw0XAHoVmtxXZBUIosyDv5ANfQpTf053ZvZAuk8CSJ/FLg83q2N/b9sn2lTByw27rzaH5ZigfInccY8FM/mFelK1c17YKM3klO/P7c2YMSyzzOBzl6dOfsKNkYLc1YHRh8RDSxkoFfl/LUvg5dUbs8wJ9DAEpxWYQh5N4NGub2OCvbDrjTV0q81NqKB5/4/qt2V7VO+7lTBJYVH6Nji9e8wu0klulF3MIo+2hBIRnKXyWXwRLNgbeYkOJw82UrBEFSCL/E811vix+qnYKNRV6T19XDVAzKbFQ84ANxYqCPea2qEqFD8xndKtVBJwwIDAQAB
-----END PUBLIC KEY-----
`)
func main() {
plaintext := "this is a pen."
block, _ := pem.Decode(publicKey)
pub, _ := x509.ParsePKIXPublicKey(block.Bytes)
cipher := EncryptWithPublicKey([]byte(plaintext), pub.(*rsa.PublicKey))
fmt.Printf("%v\n", base64.StdEncoding.EncodeToString(cipher))
block2, _ := pem.Decode(privateKey)
priv, _ := x509.ParsePKCS8PrivateKey(block2.Bytes)
decoded := DecryptWithPrivateKey(cipher, priv.(*rsa.PrivateKey))
fmt.Printf("%v = %v\n", plaintext, string(decoded))
}
func DecryptWithPrivateKey(msg []byte, priv *rsa.PrivateKey) []byte {
hash := sha512.New()
decoded, err := rsa.DecryptOAEP(hash, rand.Reader, priv, msg, nil)
if err != nil {
fmt.Println(err)
return nil
}
return decoded
}
func EncryptWithPublicKey(msg []byte, pub *rsa.PublicKey) []byte {
hash := sha512.New()
ciphertext, err := rsa.EncryptOAEP(hash, rand.Reader, pub, msg, nil)
if err != nil {
fmt.Println(err)
return nil
}
return ciphertext
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment