簽名驗證是爲了保證接口安全和識別調用方身份,同時還須要知足如下幾點:git
簽名規則大同小異,根據本身的業務狀況進行制定便可。github
簽名過程當中咱們會用到的幾種算法,接下來分享一下每一個算法的基準測試,可能會存在偏差,供你們參考。算法
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
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
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
方法。api
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
項目中,地址:https://github.com/xinliangno...安全