Skip to content

Commit a44cead

Browse files
committed
add 00-16
1 parent c8bd865 commit a44cead

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
签名验证是为了保证接口安全和识别调用方身份,同时还需要满足以下几点:
2+
3+
- 可变性:每次的签名必须是不一样的。
4+
- 时效性:每次请求的时效性,过期作废。
5+
- 唯一性:每次的签名是唯一的。
6+
- 完整性:能够对传入数据进行验证,防止篡改。
7+
8+
签名规则大同小异,根据自己的业务情况进行制定即可。
9+
10+
签名过程中我们会用到的几种算法,接下来分享一下每个算法的基准测试,可能会存在误差,供大家参考。
11+
12+
## MD5 单向散列加密
13+
14+
```
15+
func BenchmarkEncrypt(b *testing.B) {
16+
b.ResetTimer()
17+
for i := 0; i < b.N; i++ {
18+
New().Encrypt("123456")
19+
}
20+
}
21+
22+
// 输出
23+
goos: darwin
24+
goarch: amd64
25+
pkg: github.com/xinliangnote/go-gin-api/pkg/md5
26+
BenchmarkEncrypt-12 10000000 238 ns/op
27+
PASS
28+
```
29+
30+
## AES 对称加密
31+
32+
```
33+
func BenchmarkEncryptAndDecrypt(b *testing.B) {
34+
b.ResetTimer()
35+
aes := New(key, iv)
36+
for i := 0; i < b.N; i++ {
37+
encryptString, _ := aes.Encrypt("123456")
38+
aes.Decrypt(encryptString)
39+
}
40+
}
41+
42+
// 输出
43+
goos: darwin
44+
goarch: amd64
45+
pkg: github.com/xinliangnote/go-gin-api/pkg/aes
46+
BenchmarkEncryptAndDecrypt-12 1000000 1009 ns/op
47+
PASS
48+
```
49+
50+
## RSA 非对称加密
51+
52+
```
53+
func BenchmarkEncryptAndDecrypt(b *testing.B) {
54+
b.ResetTimer()
55+
rsaPublic := NewPublic(publicKey)
56+
rsaPrivate := NewPrivate(privateKey)
57+
for i := 0; i < b.N; i++ {
58+
encryptString, _ := rsaPublic.Encrypt("123456")
59+
rsaPrivate.Decrypt(encryptString)
60+
}
61+
}
62+
63+
// 输出
64+
goos: darwin
65+
goarch: amd64
66+
pkg: github.com/xinliangnote/go-gin-api/pkg/rsa
67+
BenchmarkEncryptAndDecrypt-12 1000 1345384 ns/op
68+
PASS
69+
```
70+
71+
## 最后
72+
73+
JWT 的签名验证也使用过,分享一下 `JWT` 的基准测试,使用的是 `jwt.SigningMethodHS256` 方法。
74+
75+
```
76+
func BenchmarkSignAndParse(b *testing.B) {
77+
b.ResetTimer()
78+
token := New(secret)
79+
for i := 0; i < b.N; i++ {
80+
tokenString, _ := token.Sign(123456789, "xinliangnote")
81+
token.Parse(tokenString)
82+
}
83+
}
84+
85+
// 输出
86+
goos: darwin
87+
goarch: amd64
88+
pkg: github.com/xinliangnote/go-gin-api/pkg/token
89+
BenchmarkSignAndParse-12 200000 11749 ns/op
90+
PASS
91+
```
92+
93+
以上代码在 `go-gin-api` 项目中,地址:github.com/xinliangnote/go-gin-api
94+

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Go 入门的学习笔记,从零开始学 Go,做一个 Go 工程师。
2626
│ ├── 13-结构(struct) 实现 接口(interface)
2727
│ ├── 14-学习 grpc.Dial(target string, opts …DialOption) 的写法
2828
│ ├── 15-time.RFC3339 时间格式化
29+
│ ├── 16-常用签名算法的基准测试
2930
│ ├─ 01-Gin框架
3031
│ ├── 01-框架安装
3132
│ ├── 02-路由配置

0 commit comments

Comments
 (0)