代码拉取完成,页面将自动刷新
package signature
import (
"crypto/rsa"
"encoding/base64"
"encoding/json"
"fmt"
"strings"
)
// EncodeAndSignToken 编码和签名Token
func EncodeAndSignToken(token interface{}, priv *rsa.PrivateKey) (string, error) {
bytes, err := json.Marshal(token)
if err != nil {
return ``, err
}
sig, err := Sign(bytes, priv)
if err != nil {
return ``, err
}
return base64.StdEncoding.EncodeToString(bytes) + `.` + base64.StdEncoding.EncodeToString(sig), nil
}
// CheckToken 验证Token签名是否正确,如果正确则使用Json反序列化为传入结构
func CheckToken(tokenStr string, pub *rsa.PublicKey, token interface{}) error {
// 将Token字符串还原成数据和签名
vec := strings.Split(tokenStr, `.`)
if len(vec) != 2 {
return fmt.Errorf(`Invalid token string`)
}
bytes, err := base64.StdEncoding.DecodeString(vec[0])
if err != nil {
return err
}
sig, err := base64.StdEncoding.DecodeString(vec[1])
if err != nil {
return err
}
// 验证签名
_, err = Verify(bytes, sig, pub)
if err != nil {
return err
}
// 反序列化Token
err = json.Unmarshal(bytes, token)
if err != nil {
return err
}
return nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。