-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommon_masking.go
More file actions
63 lines (56 loc) · 1.84 KB
/
common_masking.go
File metadata and controls
63 lines (56 loc) · 1.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package gorm_masking
import (
"gorm.io/gorm"
"gorm.io/gorm/schema"
"math"
)
type MaskingPosition string
const (
Left MaskingPosition = "left"
Right MaskingPosition = "right"
Middle MaskingPosition = "middle"
)
type CommonMasking struct {
secretKey string
maskingRate float32
maskingPosition MaskingPosition
}
func NewCommonMasking(secretKey string, maskingRate float32, maskingPosition MaskingPosition) *CommonMasking {
return &CommonMasking{secretKey: secretKey, maskingRate: maskingRate, maskingPosition: maskingPosition}
}
func (p *CommonMasking) Making(src string, field *schema.Field, db *gorm.DB) (string, string) {
var desensitization, encryptValue string
srcRune := []rune(src)
length := len(srcRune)
if length == 0 {
return "", ""
}
if p.maskingRate >= 1 {
desensitization = generate(length)
} else if p.maskingRate <= 0 {
desensitization = src
} else {
minMaskingLength := 1
if int(float32(length)*p.maskingRate) > minMaskingLength {
minMaskingLength = int(float32(length) * p.maskingRate)
}
switch p.maskingPosition {
case Left:
desensitization = generate(minMaskingLength) + string(srcRune[minMaskingLength-1:])
case Right:
desensitization = string(srcRune[:(length-minMaskingLength)]) + generate(minMaskingLength)
case Middle:
minLeft := int(math.Floor(float64(length-minMaskingLength) / 2.0))
//desensitization = generate(minLeft) + string(srcRune[minLeft:(minLeft+minMaskingLength)]) + generate(length-minLeft-minMaskingLength)
desensitization = string(srcRune[:minLeft]) + generate(minMaskingLength) + string(srcRune[minLeft+minMaskingLength:])
}
}
encryptValue = encrypt(src, p.secretKey)
return desensitization, encryptValue
}
func (p *CommonMasking) UnMasking(v string, field *schema.Field, db *gorm.DB) string {
if len(v) == 0 {
return ""
}
return decryptValue(v, p.secretKey)
}