打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[系列] Go - 常用签名算法的基准测试

签名验证是为了保证接口安全和识别调用方身份,同时还需要满足以下几点:

  • 可变性:每次的签名必须是不一样的。
  • 时效性:每次请求的时效性,过期作废。
  • 唯一性:每次的签名是唯一的。
  • 完整性:能够对传入数据进行验证,防止篡改。

签名规则大同小异,根据自己的业务情况进行制定即可。

签名过程中我们会用到的几种算法,接下来分享一下每个算法的基准测试,可能会存在误差,供大家参考。

MD5 单向散列加密

func BenchmarkEncrypt(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
New().Encrypt("123456")
}
}

// 输出
goos: darwin
goarch: amd64
pkg: github.com/xinliangnote/go-gin-api/pkg/md5
BenchmarkEncrypt-12    10000000       238 ns/op
PASS

AES 对称加密

func BenchmarkEncryptAndDecrypt(b *testing.B) {
b.ResetTimer()
aes := New(key, iv)
for i := 0; i < b.N; i++ {
encryptString, _ := aes.Encrypt("123456")
aes.Decrypt(encryptString)
}
}

// 输出
goos: darwin
goarch: amd64
pkg: github.com/xinliangnote/go-gin-api/pkg/aes
BenchmarkEncryptAndDecrypt-12     1000000      1009 ns/op
PASS

RSA 非对称加密

func BenchmarkEncryptAndDecrypt(b *testing.B) {
b.ResetTimer()
rsaPublic := NewPublic(publicKey)
rsaPrivate := NewPrivate(privateKey)
for i := 0; i < b.N; i++ {
encryptString, _ := rsaPublic.Encrypt("123456")
rsaPrivate.Decrypt(encryptString)
}
}

// 输出
goos: darwin
goarch: amd64
pkg: github.com/xinliangnote/go-gin-api/pkg/rsa
BenchmarkEncryptAndDecrypt-12        1000   1345384 ns/op
PASS

最后

JWT 的签名验证也使用过,分享一下 JWT 的基准测试,使用的是 jwt.SigningMethodHS256 方法。

func BenchmarkSignAndParse(b *testing.B) {
b.ResetTimer()
token := New(secret)
for i := 0; i < b.N; i++ {
tokenString, _ := token.Sign(123456789, "xinliangnote")
token.Parse(tokenString)
}
}

// 输出
goos: darwin
goarch: amd64
pkg: github.com/xinliangnote/go-gin-api/pkg/token
BenchmarkSignAndParse-12      200000     11749 ns/op
PASS

以上代码在 go-gin-api 项目中,地址:github.com/xinliangnote/go-gin-api

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【Go语言实战】(3) Gin + Gorm 简单备忘录 | 含接口文档
从零开始使用Go快速写出一个Web后端,使用Gin gorm Mysql做一个合格CURD程序员
Golang工程经验
Go语言网络编程入门不走弯路最佳案例(写Api接口)
如何使用Golang的Gin框架渲染HTML页面
整洁架构的正确之路
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服