Gin框架学习(九)

简介: 来这里学习gin框架,目标明确不迷茫。

学习思维导图

Gin框架思维导图

精通篇

token

HMAC签名方法

package main
import (
    "crypto/hmac"
    "crypto/sha256"
    "crypto/md5"
    "encoding/hex"
)
// HmacSha256 加密
func HmacSha256(key string, encrypt string) string {
  // 使用sha256的加密方式
  hMac := hmac.New(sha256.New, []byte(encrypt))
  // 信息加密
  hMac.Write([]byte(key))
  // 将签名转成字符串
  sha := hex.EncodeToString(hMac.Sum(nil))
}
// 得到新的签名
newSign := HmacSha256(key, encrypt)
// 验证签名
if oldSign != newSign {
  return errors.New("无效签名")
}
// HmacMd5 加密
func HmacMd5(key string, encrypt string) string {
  // 使用Md5的加密方式
   hMac := hmac.New(md5.New, []byte(encrypt))
   // 信息加密
   hMac.Write([]byte(encrypt))
   return hex.EncodeToString(h.Sum([]byte("")))
}

RSA签名方法


package main
 
import (
    "crypto"
    "crypto/ecdsa"
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    "encoding/pem"
    "fmt"
    "math/big"
    "os"
)
 func rsaVerifySign(Text []byte, KeyFile string, Sign []byte) bool {
    // 读取公钥文件并解析成rsa.PublicKey
    file, err := os.Open(KeyFile)
    if err != nil {
        return false
    }
    stat, err := file.Stat()
    if err != nil {
        return false
    }
    buf := make([]byte, stat.Size())
    file.Read(buf)
    defer file.Close()
 
    block, _ := pem.Decode(buf)
    KeyInt, err := x509.ParsePKIXPublicKey(block.Bytes)
    Key := KeyInt.(*rsa.Key)
 
    // 计算原始内容的散列值
    h := sha512.New()
    h.Write(Text)
    hValue := h.Sum(nil)
 
    // 确认签名
    err = rsa.VerifyPKCS1v15(Key, crypto.SHA512,hValue, Sign)
 
    return err == nil
}
 

ECDSA签名方法

package main
import (
    "crypto/ecdsa"
    "crypto/rand"
    "fmt"
    "crypto/elliptic"
    "log"
)

func main() {
    // 生成公钥和私钥
    privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
    if err != nil {
        log.Fatalln(err)
    }
    publicKey := &privateKey.PublicKey
    message := []byte("签名")

    // 进入签名操作
    r, s, _ := ecdsa.Sign(rand.Reader, privateKey, message)
    // 进入验证
    flag := ecdsa.Verify(publicKey, message, r, s)
    if flag {
        fmt.Println("未被修改")
    } else {
        fmt.Println("已被修改")
    }
    flag = ecdsa.Verify(publicKey, []byte("ok"), r, s)
    if flag {
        fmt.Println("未被修改")
    } else {
        fmt.Println("已被修改")
    }
}

后记

喜欢的话可以三连,后续继续更新其他内容,帮忙推一推,感谢观看!

相关文章
|
9月前
|
Go API 网络架构
Gin框架快速入门1
Gin框架快速入门1
87 0
|
SQL 关系型数据库 MySQL
gin框架学习-Gorm入门指南
Snake Case命名风格,就是各个单词之间用下划线(_)分隔,首字母大写区分一个单词,例如: CreateTime的Snake Case风格命名为create_time
357 0
gin框架学习-Gorm入门指南
|
2月前
|
Go
gin初体验
gin初体验
19 0
|
2月前
|
JSON 中间件 API
Gin框架笔记(一) Gin框架的安装与Hello World
Gin框架笔记(一) Gin框架的安装与Hello World
|
2月前
|
JSON 中间件 数据格式
Gin框架学习笔记(六)——gin中的日志使用
Gin框架学习笔记(六)——gin中的日志使用
|
2月前
|
JSON 前端开发 Java
|
2月前
|
前端开发 中间件 关系型数据库
|
算法 搜索推荐 中间件
Go Gin web框架的路由原理及中间件原理
Go Gin web框架的路由原理及中间件原理
617 1
Go Gin web框架的路由原理及中间件原理
|
Go API
gin框架学习-快速安装gin
Gin 是一个用 Go (Golang) 编写的 Web 框架,由于 httprouter,它具有 martini 的 API,性能提高了 40 倍。具有高性能的优点。
152 0
gin框架学习-快速安装gin
基于Gin封装Web框架 - 3. 初始化 rum 框架
基于Gin封装Web框架 - 3. 初始化 rum 框架
174 0
基于Gin封装Web框架 - 3. 初始化 rum 框架