encoding.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package encoding
  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, salt string) string {
  43. if salt != "" {
  44. origin = origin + salt
  45. }
  46. return fmt.Sprintf("%x", md5.New().Sum([]byte(origin)))
  47. }
  48. func SHA256(origin string, salt string) string {
  49. if salt != "" {
  50. origin = origin + salt
  51. }
  52. return fmt.Sprintf("%x", sha256.Sum256([]byte(origin)))
  53. }
  54. func Base64Encode(content []byte) string {
  55. return base64.StdEncoding.EncodeToString(content)
  56. }
  57. func Base64Decode(content string) ([]byte, error) {
  58. return base64.StdEncoding.DecodeString(content)
  59. }
  60. func pkcs7Padding(ciphertext []byte, blockSize int) []byte {
  61. padding := blockSize - len(ciphertext)%blockSize
  62. padText := bytes.Repeat([]byte{byte(padding)}, padding)
  63. return append(ciphertext, padText...)
  64. }
  65. func pkcs7UnPadding(originData []byte) []byte {
  66. length := len(originData)
  67. unPadding := int(originData[length-1])
  68. return originData[:(length - unPadding)]
  69. }