crypto.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package utils
  2. import (
  3. "crypto/aes"
  4. "crypto/cipher"
  5. "crypto/md5"
  6. "encoding/base64"
  7. "encoding/hex"
  8. "net/url"
  9. )
  10. func PKCS7UnPadding(origData []byte) []byte {
  11. length := len(origData)
  12. unpadding := int(origData[length-1])
  13. return origData[:(length - unpadding)]
  14. }
  15. func AesCBCDecrypt(encryptData, key, iv []byte) ([]byte, error) {
  16. block, err := aes.NewCipher(key)
  17. if err != nil {
  18. panic(err)
  19. }
  20. blockSize := block.BlockSize()
  21. if len(encryptData) < blockSize {
  22. panic("ciphertext too short")
  23. }
  24. if len(encryptData)%blockSize != 0 {
  25. panic("ciphertext is not a multiple of the block size")
  26. }
  27. mode := cipher.NewCBCDecrypter(block, iv)
  28. decryptedData := make([]byte, len(encryptData))
  29. mode.CryptBlocks(decryptedData, encryptData)
  30. decryptedData = PKCS7UnPadding(decryptedData)
  31. return decryptedData, nil
  32. }
  33. func Md5(str string) string {
  34. h := md5.New()
  35. h.Write([]byte(str))
  36. return hex.EncodeToString(h.Sum(nil))
  37. }
  38. func Base64Encode(str string) string {
  39. return base64.StdEncoding.EncodeToString([]byte(str))
  40. }
  41. func Base64Decode(str string) string {
  42. decodestr, _ := base64.StdEncoding.DecodeString(str)
  43. return string(decodestr)
  44. }
  45. func UrlEncode(str string) (string, error) {
  46. u, err := url.Parse(str)
  47. if err != nil {
  48. return "", err
  49. }
  50. return u.String(), nil
  51. }