des3.go 939 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package utils
  2. import (
  3. "crypto/cipher"
  4. "crypto/des"
  5. "encoding/base64"
  6. )
  7. func DesBase64Decrypt(crypted []byte, desKey string) []byte {
  8. result, _ := base64.StdEncoding.DecodeString(string(crypted))
  9. remain := len(result) % 8
  10. if remain > 0 {
  11. mod := 8 - remain
  12. for i := 0; i < mod; i++ {
  13. result = append(result, 0)
  14. }
  15. }
  16. origData, err := TripleDesDecrypt(result, []byte(desKey))
  17. if err != nil {
  18. panic(any(err))
  19. }
  20. return origData
  21. }
  22. func TripleDesDecrypt(crypted, key []byte) ([]byte, error) {
  23. block, err := des.NewTripleDESCipher(key)
  24. if err != nil {
  25. return nil, err
  26. }
  27. blockMode := cipher.NewCBCDecrypter(block, key[:8])
  28. origData := make([]byte, len(crypted))
  29. blockMode.CryptBlocks(origData, crypted)
  30. origData = PKCS5UnPadding(origData)
  31. return origData, nil
  32. }
  33. func PKCS5UnPadding(origData []byte) []byte {
  34. length := len(origData)
  35. unpadding := int(origData[length-1])
  36. return origData[:(length - unpadding)]
  37. }