encoding.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package utils
  2. import (
  3. "bytes"
  4. "crypto/aes"
  5. "crypto/cipher"
  6. "crypto/md5"
  7. "crypto/sha256"
  8. "encoding/base64"
  9. "fmt"
  10. )
  11. func AESEncrypt(originData string, key string) (string, error) {
  12. keyBytes := []byte(key)
  13. block, err := aes.NewCipher(keyBytes)
  14. if err != nil {
  15. return "", err
  16. }
  17. originDataBytes := []byte(originData)
  18. blockSize := block.BlockSize()
  19. originDataBytes = pkcs7Padding(originDataBytes, blockSize)
  20. blockMode := cipher.NewCBCEncrypter(block, keyBytes[:blockSize])
  21. encrypted := make([]byte, len(originDataBytes))
  22. blockMode.CryptBlocks(encrypted, originDataBytes)
  23. return base64.StdEncoding.EncodeToString(encrypted), nil
  24. }
  25. func AESDecrypt(encrypted string, key string) (string, error) {
  26. keyBytes := []byte(key)
  27. block, err := aes.NewCipher(keyBytes)
  28. if err != nil {
  29. return "", err
  30. }
  31. decoded, err := base64.StdEncoding.DecodeString(encrypted)
  32. if err != nil {
  33. return "", err
  34. }
  35. blockSize := block.BlockSize()
  36. blockMode := cipher.NewCBCDecrypter(block, keyBytes[:blockSize])
  37. originData := make([]byte, len(decoded))
  38. blockMode.CryptBlocks(originData, decoded)
  39. originData = pkcs7UnPadding(originData)
  40. return string(originData), nil
  41. }
  42. func MD5(origin string) string {
  43. return fmt.Sprintf("%x", md5.New().Sum([]byte(origin)))
  44. }
  45. func SHA256(origin string) string {
  46. return fmt.Sprintf("%x", sha256.Sum256([]byte(origin)))
  47. }
  48. func pkcs7Padding(ciphertext []byte, blockSize int) []byte {
  49. padding := blockSize - len(ciphertext)%blockSize
  50. padText := bytes.Repeat([]byte{byte(padding)}, padding)
  51. return append(ciphertext, padText...)
  52. }
  53. func pkcs7UnPadding(originData []byte) []byte {
  54. length := len(originData)
  55. unPadding := int(originData[length-1])
  56. return originData[:(length - unPadding)]
  57. }