des.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package utils
  2. import (
  3. "crypto/cipher"
  4. "crypto/des"
  5. "fmt"
  6. )
  7. type DES struct {
  8. block cipher.Block
  9. key, iv []byte
  10. }
  11. // 定义Key与向量的值
  12. var DES_KEY = []byte{102, 16, 93, 156, 78, 4, 218, 32}
  13. var DES_IV = []byte{55, 103, 246, 79, 36, 99, 167, 3}
  14. func DESEncrypt(src []byte) []byte {
  15. des, err := newDESInstance(DES_KEY, DES_IV)
  16. if err != nil {
  17. fmt.Println("DES Encrypt Error: ", err)
  18. return nil
  19. }
  20. return encrypt(des.block, src, des.key, des.iv)
  21. }
  22. func DESEncryptString(src string, base64Encoding bool) string {
  23. tmp := DESEncrypt([]byte(src))
  24. return bytes2String(tmp, base64Encoding)
  25. }
  26. func DESDecrypt(encrypted []byte) []byte {
  27. des, err := newDESInstance(DES_KEY, DES_IV)
  28. if err != nil {
  29. fmt.Println("DES Encrypt Error: ", err)
  30. return nil
  31. }
  32. return decrypt(des.block, encrypted, des.key, des.iv)
  33. }
  34. func DESDecryptString(encrypted string, base64Encoding bool) (string, error) {
  35. tmp, err := string2Bytes(encrypted, base64Encoding)
  36. if err != nil {
  37. return "", err
  38. }
  39. return string(DESDecrypt(tmp)), err
  40. }
  41. func newDESInstance(key, iv []byte) (*DES, error) {
  42. key = genBytes(key, KEY_LENGTH)
  43. block, err := des.NewCipher(key)
  44. if err != nil {
  45. return nil, err
  46. }
  47. return &DES{block: block, key: key, iv: iv}, err
  48. }