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

mb6004f7a0e5cc3 · · 331 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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


有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mb6004f7a0e5cc3

查看原文:[系列] Go - 常用签名算法的基准测试

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

331 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传