当前位置: 首页 > wzjs >正文

html5手机网站开发实例重庆seo整站优化设置

html5手机网站开发实例,重庆seo整站优化设置,IT科技资讯新闻类织梦网站模板,外贸有限公司英文网站本文目录 一、密码处理1. 哈希处理2. 简单单测 二、实现JWT功能1. 功能实现 一、密码处理 1. 哈希处理 密码hash的逻辑很简单,用go自带的"golang.org/x/crypto/bcrypt"包就可以实现。所以我们一般是存储hash之后的密码。 主要函数有两段: …

在这里插入图片描述

本文目录

  • 一、密码处理
    • 1. 哈希处理
    • 2. 简单单测
  • 二、实现JWT功能
    • 1. 功能实现

一、密码处理

1. 哈希处理

密码hash的逻辑很简单,用go自带的"golang.org/x/crypto/bcrypt"包就可以实现。所以我们一般是存储hash之后的密码。

主要函数有两段:

第一段是进行hash,将输入的明文密码 pwd 转换为哈希值(加密后的密码)。

首先将密码 pwd 转换为字节数组 []byte。使用 bcryptGenerateFromPassword 方法生成哈希值。

bcrypt.MinCostbcrypt 的成本因子,表示加密的强度。MinCost 是最低成本,适合测试环境;实际生产环境中通常使用更高的成本(如 bcrypt.DefaultCost)以增强安全性。

然后返回生成的哈希值,将其转换为字符串类型以便存储或传输。

func HashPwd(pwd string) string {hash, err := bcrypt.GenerateFromPassword([]byte(pwd), bcrypt.MinCost)if err != nil {log.Println(err)}return string(hash)
}

第二个是进行hash对比的函数,验证输入的明文密码 pwd 是否与已哈希的密码 hashPwd 匹配。

func CheckPwd(hashPwd string, pwd string) bool {byteHash := []byte(hashPwd)err := bcrypt.CompareHashAndPassword(byteHash, []byte(pwd))if err != nil {log.Println(err)return false}return true
}

2. 简单单测

然后创建一个test文件,进行功能验证,可以看到最终能够输出true。
在这里插入图片描述

二、实现JWT功能

1. 功能实现

用户登录之后会返回一个JWT,三段式,也就是头部+payload载荷+密钥,每个部分通过.进行连接,每个部分都会经过base64的编码。

头部信息会存储加密方式,payload存储一些不敏感字段,比如用户信息等,第三部分是密钥,存储在服务端,客户是不知道的。

然后下次客户端就会在申请资源的过程中,携带上这个JWT,然后服务端一般会有一些中间件对这个JWT进行验证,是否过期、是否被篡改(第三部分密钥加密,进行对比,判断是否防篡改了)等。

package jwtsimport ("errors""github.com/golang-jwt/jwt/v4""time"
)// JwtPayLoad jwt中payload数据
type JwtPayLoad struct {UserID   uint   `json:"user_id"`Username string `json:"username"` // 用户名Role     int    `json:"role"`     // 权限  1 普通用户  2 管理员
}type CustomClaims struct {JwtPayLoadjwt.RegisteredClaims
}// GenToken 创建 Token
func GenToken(payload JwtPayLoad, accessSecret string, expires int) (string, error) {claim := CustomClaims{JwtPayLoad: payload,RegisteredClaims: jwt.RegisteredClaims{ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour * time.Duration(expires))),},}token := jwt.NewWithClaims(jwt.SigningMethodHS256, claim)return token.SignedString([]byte(accessSecret))
}// ParseToken 解析 token
func ParseToken(tokenStr string, accessSecret string) (*CustomClaims, error) {token, err := jwt.ParseWithClaims(tokenStr, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {return []byte(accessSecret), nil})if err != nil {return nil, err}if claims, ok := token.Claims.(*CustomClaims); ok && token.Valid {return claims, nil}return nil, errors.New("invalid token")
}

写个test文件测试一下GenToken的功能。

在这里插入图片描述

可以得到如下的Token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6IkdvY2hhdCIsInJvbGUiOjEsImV4cCI6MTc0NTY4NTM3NH0.f7BqVwzBBXdY_6FSv-VtVJKemQAW-cJnrzZy_xxg3NU

那么找一个JWT在线工具,验证一下是否是得我们刚刚输入的这些信息配置。

对比没问题,能够看得到这个信息是正确的。

在这里插入图片描述

进一步输入这个密钥去校验,看看是否能够通过。

在这里插入图片描述
需要注意的是,中间的载荷部分,只是对json信息的base64编码,而不是加密。

第三部分的密钥是用来验证JWT的完整性和真实性,也就是说,签名是通过对header+payload进行编码之后,使用制定的算法和密钥进行加密生成的。

比如我们使用了 HMAC SHA-256算法,那么签名的生成公式为:
Signature = HMACSHA256(Base64UrlEncode(Header) + "." + Base64UrlEncode(Payload), SecretKey),因为密钥是只保存在服务器端的,那么当第一次服务器端生成这个JWT,并且后续的申请访问都会携带这个JWT,服务端会对这个JWT进行签名验证,来防止篡改。

客户端通常会将 JWT 放在 HTTP 请求的 Authorization 头部中,格式如下:
Authorization: Bearer <JWT>,比如:Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InVzZXIxIiwicm9sZSI6MSwiZXhwIjoxNjI4NTEyMzkzfQ.HxZzRq1234567890,那么在服务端验证JWT的过程是怎么进行的,首先服务端会解析 JWT 的三部分(Header、Payload 和 Signature),然后服务端使用相同的密钥(Secret Key)和算法对 Header 和 Payload 进行签名验证,将重新计算的签名与 JWT 中的签名进行比较。

如果签名一致,说明 JWT 是由可信的签名方生成的,且未被篡改。服务端会检查 Payload 中的 exp(过期时间)声明,如果当前时间大于 exp,则 JWT 已过期,验证失败。如果 JWT 未过期,继续下一步验证。

服务端还可以验证其他声明,比如 iat(签发时间):确保 JWT 是在合理的时间范围内签发的,sub(主题):确保 JWT 是为特定用户或实体签发的。


文章转载自:

http://5n7VDy1h.qjzfn.cn
http://9BCjbOjJ.qjzfn.cn
http://flbjDoi9.qjzfn.cn
http://kMZKJsyq.qjzfn.cn
http://79Oy3FDV.qjzfn.cn
http://ANGOSyQw.qjzfn.cn
http://RtJrW2ye.qjzfn.cn
http://XtUqF1nI.qjzfn.cn
http://6avzStIH.qjzfn.cn
http://n31q3a3Z.qjzfn.cn
http://IbK2AQUn.qjzfn.cn
http://9Afq7PWf.qjzfn.cn
http://qxEpAjAW.qjzfn.cn
http://9a40KOV3.qjzfn.cn
http://5ix7VWia.qjzfn.cn
http://rDRUTZjc.qjzfn.cn
http://UrvklqUn.qjzfn.cn
http://RN7eviDf.qjzfn.cn
http://SlYd2whA.qjzfn.cn
http://cIFBYVuw.qjzfn.cn
http://SOtfNOhe.qjzfn.cn
http://AqrnHKO7.qjzfn.cn
http://xxhTy0lN.qjzfn.cn
http://SKOecNiH.qjzfn.cn
http://HOTSqonK.qjzfn.cn
http://5ZU9DVFj.qjzfn.cn
http://Q8TUTXto.qjzfn.cn
http://WZpAkUTv.qjzfn.cn
http://pWQ0eE4i.qjzfn.cn
http://HIpxUxF6.qjzfn.cn
http://www.dtcms.com/wzjs/770019.html

相关文章:

  • 公司网站建设一年多少钱沛县可以做网站的单位
  • php建站模板专业做w7系统的网站
  • 做什么地方网站网络规划设计师考试资料
  • 视频发布网站有哪些内容房产网站的建设
  • 网站活动专题页面赣州新闻视频
  • 优惠建网站网上有专业的做网站吗
  • 网站开发难吗2008最好的素材网站
  • 个人博客网站建设业务个人网站可以做经营性的吗
  • 南宁企业如何建网站最好网站建设
  • 浙江建设厅网站施工员报名做一个商城网站需要提交那些文件
  • 局域网建设网站视频教程网站开发合同协议
  • 山东平台网站建设价位ps怎么做网站页面
  • 怎么用表格做网站建设电商网站的总结
  • 没有网站怎么做排名优化易支付对接WordPress
  • 网站开发的需要的技术人员婚恋网站建设的目的
  • 木方东莞网站建设技术支持棋牌网站建设要多少钱
  • 做网站手机浏览全屏网站因为备案关闭了 怎么办
  • 商城网站定制怎么做广告策划方案范例模板
  • 什么手机可做网站浙江建设厅网站
  • 在线视频网站怎么做seo网站制度建设模板
  • iview做的网站什么是ui设计师
  • 响应式网站建设系统互联网+创新创业
  • 销售网站建设的意义企业网站项目报价多少合适
  • 网站建设尢首先金手指博客网站源码
  • 公司网站制作的费用申请设计网站物理结构怎么做
  • 系统网站有哪些网站建设包括内容
  • 做问卷赚钱的网站全球网站排名查询
  • 网站开发的人站酷设计网站官网入口文字设计
  • 淘宝运营培训多少钱西安seo网站优化
  • 南京模板网站开发wordpress最新版核心