RSA module
go get github.com/maplepie/rsa
RSA is designed to encrypt or decrypt data. It supports:
- encrypt or decrypt data
- sign and verify data
- reading from
PEM
,SSH-RSA
,OpenSSH
key files - writing to
PEM
,SSH-RSA
key files - generate key
Here is an example of simple encrypt/decrypt data.
r := rsa.New()
str := []byte("Hello World!")
err := r.GenerateKey(rsa.ADVANTAGE_KEY_BITS)
if err != nil {
fmt.Println(err)
}
encrypt, err := r.Encrypt(str, nil)
if err != nil {
fmt.Println(err)
}
result, err := r.Decrypt(encrypt, nil)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(result))
you can use label to encrypt your data, and you should use the same label to decrypt your data which you had encrypt.
r := rsa.New()
str := []byte("Hello World!")
err := r.GenerateKey(rsa.ADVANTAGE_KEY_BITS)
if err != nil {
fmt.Println(err)
}
// add label
label := []byte("your message id")
encrypt, err := r.Encrypt(str, label)
if err != nil {
fmt.Println(err)
}
result, err := r.Decrypt(encrypt, label)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(result))
r := rsa.New()
str := []byte("Hello World!")
p := rsa.NewPemKey() // read key use pem method
// p := rsa.NewSSHKey() // read key use ssh-rsa method
r.SetReader(p)
// load file form file path
err := r.Load("private.pem", "public.pem")
if err != nil {
fmt.Println(err)
}
encrypt, err := r.Encrypt(str, nil)
if err != nil {
fmt.Println(err)
}
fmt.Println(encrypt)
r := rsa.New()
err := r.GenerateKey(rsa.ADVANTAGE_KEY_BITS)
if err != nil {
fmt.Println(err)
}
p := rsa.NewPemKey() // save key use pem method
// p := rsa.NewSSHKey() // save key use ssh-rsa method
r.SetWriter(p)
// save file to file path
err = r.Save("private.pem", "public.pem")
if err != nil {
fmt.Println(err)
}
translate pem type to ssh-rsa type, or reverse.
r := rsa.New()
p1 := rsa.NewPemKey() // read key use pem method
p2 := rsa.NewSSHKey() // save key use ssh-rsa method
r.SetReader(p1)
r.SetWriter(p2)
err = r.Load("private.pem", "public.pem")
if err != nil {
fmt.Println(err)
}
// save file to file path
err = r.Save("id_rsa", "id_rsa.pub")
if err != nil {
fmt.Println(err)
}
if you want to use custom reader/writer, you just need to implement the interface of Reader
or Writer
.
type Reader interface {
Load(key *Key, privateFile string, publicFile string) (err error)
}
type Writer interface {
Save(key *Key, privateFile string, publicFile string) (err error)
}