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  }