签名验证是为了保证接口安全和识别调用方身份,同时还需要满足以下几点:
签名规则大同小异,根据自己的业务情况进行制定即可。
签名过程中我们会用到的几种算法,接下来分享一下每个算法的基准测试,可能会存在误差,供大家参考。
func BenchmarkEncrypt(b *testing.B) {b.ResetTimer()for i := 0; i < b.N; i++ {New().Encrypt("123456")}}// 输出goos: darwingoarch: amd64pkg: github.com/xinliangnote/go-gin-api/pkg/md5BenchmarkEncrypt-12 10000000 238 ns/opPASS
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: darwingoarch: amd64pkg: github.com/xinliangnote/go-gin-api/pkg/aesBenchmarkEncryptAndDecrypt-12 1000000 1009 ns/opPASS
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: darwingoarch: amd64pkg: github.com/xinliangnote/go-gin-api/pkg/rsaBenchmarkEncryptAndDecrypt-12 1000 1345384 ns/opPASS
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: darwingoarch: amd64pkg: github.com/xinliangnote/go-gin-api/pkg/tokenBenchmarkSignAndParse-12 200000 11749 ns/opPASS
以上代码在 go-gin-api
项目中,地址:github.com/xinliangnote/go-gin-api