• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Go实现基于RSA加密算法的接口鉴权

    基于 RSA 加密算法的接口鉴权方案

    假设接口调用者是客户端,接口提供方是服务端,则此方案存在以下规则:

    生成公私钥

    # 生成 1024 位长度的私钥
    openssl genrsa -out private-key.pem 1024
    
    # 生成公钥
    openssl rsa -in private-key.pem -pubout -out public-key.pem
    
    

    代码实现

    加签

    使用 SHA1 + RSA 对请求内容加签:

    package utils
    
    import (
     "crypto"
     "crypto/rand"
     "crypto/rsa"
     "crypto/sha1"
     "crypto/x509"
     "encoding/hex"
     "encoding/pem"
     "errors"
     "io/ioutil"
    )
    
    var (
     Privkey string
    )
    
    func Sign(s string) (string, error) {
     key, err := ioutil.ReadFile(Privkey)
     if err != nil {
      return "", err
     }
     r, err := encryptSHA1WithRSA(key, []byte(s))
     if err != nil {
      return "", err
     }
     return hex.EncodeToString(r), nil
    }
    
    func encryptSHA1WithRSA(key, data []byte) ([]byte, error) {
     block, _ := pem.Decode(key)
     if block == nil {
      return nil, errors.New("no PEM data is found")
     }
    
     private, err := x509.ParsePKCS1PrivateKey(block.Bytes)
     if err != nil {
      return nil, err
     }
     hashed := SHA1(data)
     return rsa.SignPKCS1v15(rand.Reader, private, crypto.SHA1, hashed)
    }
    
    func SHA1(data []byte) []byte {
     h := sha1.New()
     h.Write(data)
     return h.Sum(nil)
    }

    验签

    package utils
    
    import (
     "crypto"
     "crypto/rsa"
     "crypto/sha1"
     "crypto/x509"
     "encoding/hex"
     "encoding/pem"
     "io/ioutil"
    )
    
    var (
     Pubkey  string
    )
    
    func VerifySig(origin, sig string) error {
     b, err := ioutil.ReadFile(Pubkey)
     if err != nil {
      return err
     }
     block, _ := pem.Decode(b)
     pub, err := x509.ParsePKIXPublicKey(block.Bytes)
     if err != nil {
      return err
     }
     hashed := SHA1([]byte(origin))
     sigBytes, err := hex.DecodeString(sig)
     if err != nil {
      return err
     }
     return rsa.VerifyPKCS1v15(pub.(*rsa.PublicKey), crypto.SHA1, hashed, []byte(sigBytes))
    }
    
    func SHA1(data []byte) []byte {
     h := sha1.New()
     h.Write(data)
     return h.Sum(nil)
    }
    
    

    到此这篇关于Go实现基于RSA加密算法的接口鉴权的文章就介绍到这了,更多相关Go RSA接口鉴权内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 简单介绍django提供的加密算法
    • Django自带的加密算法及加密模块详解
    • Go语言实现AzDG可逆加密算法实例
    • Go中使用加密算法的方法
    上一篇:详解Go语言运用广度优先搜索走迷宫
    下一篇:go语言使用Casbin实现角色的权限控制
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Go实现基于RSA加密算法的接口鉴权 实现,基于,RSA,加密,算法,