encoding.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 pkcs7Padding(ciphertext []byte, blockSize int) []byte {
  55. padding := blockSize - len(ciphertext)%blockSize
  56. padText := bytes.Repeat([]byte{byte(padding)}, padding)
  57. return append(ciphertext, padText...)
  58. }
  59. func pkcs7UnPadding(originData []byte) []byte {
  60. length := len(originData)
  61. unPadding := int(originData[length-1])
  62. return originData[:(length - unPadding)]
  63. }