簽名驗證是為了保證介面安全和識別呼叫方身份,同時還需要滿足以下幾點:
- 可變性:每次的簽名必須是不一樣的,
- 時效性:每次請求的時效性,過期作廢,
- 唯一性:每次的簽名是唯一的,
- 完整性:能夠對傳入資料進行驗證,防止篡改,
簽名規則大同小異,根據自己的業務情況進行制定即可,
簽名程序中我們會用到的幾種演算法,接下來分享一下每個演算法的基準測驗,可能會存在誤差,供大家參考,
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/247035.html
標籤:Go
上一篇:go協程全域變數和區域變數
