Go语言中实现RSA加解密、签名验证算法 
                                                    
                        
                    
                    
  
                    
                    随着互联网的高速发展,人们对安全的要求也越来越高。密码学中两大经典算法,一个是对称加解密,另一个是非对称加解密,这里就来分享一下非对称加密算法的代表:RSA加解密。
在Go语言中实现RSA加解密还是比较简单的,网上很多教程都是基于Go原生标准库写的,代码量较多。这里分享一个好用的库: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)
    }这个加解密库:github.com/forgoer/openssl,它还支持AES、DES、RSA、sha1、Hmac-Sha1、sha256、Hmac-Sha256等常用算法。
本作品采用《CC 协议》,转载必须注明作者和本文链接
                                
                                
                                    专注于分享 Go、Java、Python、PHP、Node.js 等全栈技术开发领域知识,欢迎关注我的 技术圈!
                                
                            
                        
                     
           JonLee 的个人博客
 JonLee 的个人博客
         
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: