随着互联网的高速倒退,人们对平安的要求也越来越高。密码学中两大经典算法,一个是对称加解密,另一个是非对称加解密,这里就来分享一下非对称加密算法的代表:RSA加解密。

在Go语言中实现RSA加解密还是比较简单的,网上很多教程都是基于Go原生规范库写的,代码量较多。这里分享一个好用的库:https://github.com/forgoer/openssl 。

装置

go get https://github.com/forgoer/openssl

秘钥生成

秘钥能够生成在文件里,也是生成到Buffer里,只有实现了io.Writer即可。

import (    "io/ioutil"    "os"    "github.com/forgoer/openssl")func main() {    // 创立私钥文件    priFile, err := os.Create("private.key") // 也能够应用buffer, priBuf := bytes.NewBuffer(nil)    if err != nil {        panic(err)    }    defer priFile.Close()    // 生成私钥到文件    _ = openssl.RSAGenerateKey(1024, priFile)    // 创立公钥文件    pubFile, err := os.Create("public.key")    if err != nil {        panic(err)    }    defer priFile.Close()    // 通过私钥生成公钥到文件    priByte, _ := ioutil.ReadFile("private.key")    _ = openssl.RSAGeneratePublicKey(priByte, pubFile)}

加解密

应用公钥加密,私钥解密。

    src := []byte("123456")    pubByte, _ := ioutil.ReadFile("public.key")    // 公钥加密    dst, _ := openssl.RSAEncrypt(src, pubByte)    priByte, _ := ioutil.ReadFile("private.key")    // 私钥解密    res, _ := openssl.RSADecrypt(dst, priByte)    fmt.Println(string(res)) // 123456

签名及验证

应用私钥签名,公钥验证。

    // 私钥签名    sign, err := openssl.RSASign([]byte("123456"), priByte, crypto.SHA256)    if err != nil {        panic(err)    }    // 公钥验证签名    err = openssl.RSAVerify([]byte("123456"), sign, pubByte, crypto.SHA256)    if err != nil {        panic(err)    }

这个加解密库:https://github.com/forgoer/openssl,它还反对AESDESRSAsha1Hmac-Sha1sha256Hmac-Sha256等罕用算法。