gitee.com/h79/goutils@v1.22.10/common/algorithm/sm4.go (about) 1 package algorithm 2 3 import ( 4 "crypto/cipher" 5 "encoding/base64" 6 "github.com/tjfoc/gmsm/sm4" 7 ) 8 9 type Sm4 struct { 10 } 11 12 func (s *Sm4) Encrypt(raw, key []byte) (string, error) { 13 data, err := s.sm4Encrypt(raw, key) 14 if err != nil { 15 return "", err 16 } 17 return base64.StdEncoding.EncodeToString(data), nil 18 } 19 20 func (s *Sm4) Decrypt(raw string, key []byte) ([]byte, error) { 21 data, err := base64.StdEncoding.DecodeString(raw) 22 if err != nil { 23 return nil, err 24 } 25 return s.sm4Decrypt(data, key) 26 } 27 28 // 加密 29 func (s *Sm4) sm4Encrypt(raw []byte, key []byte) ([]byte, error) { 30 enc := NewECB(func(key []byte) (cipher.Block, error) { 31 block, err := sm4.NewCipher(key) 32 if err != nil { 33 return nil, err 34 } 35 return block, nil 36 }) 37 return enc.Encrypt(raw, key, nil) 38 } 39 40 // 解密 41 func (s *Sm4) sm4Decrypt(raw []byte, key []byte) ([]byte, error) { 42 enc := NewECB(func(key []byte) (cipher.Block, error) { 43 block, err := sm4.NewCipher(key) 44 if err != nil { 45 return nil, err 46 } 47 return block, nil 48 }) 49 return enc.Decrypt(raw, key, nil) 50 }