aesecb_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package codec
  2. import (
  3. "crypto/aes"
  4. "encoding/base64"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func TestAesEcb(t *testing.T) {
  9. var (
  10. key = []byte("q4t7w!z%C*F-JaNdRgUjXn2r5u8x/A?D")
  11. val = []byte("helloworld")
  12. valLong = []byte("helloworldlong..")
  13. badKey1 = []byte("aaaaaaaaa")
  14. // more than 32 chars
  15. badKey2 = []byte("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
  16. )
  17. _, err := EcbEncrypt(badKey1, val)
  18. assert.NotNil(t, err)
  19. _, err = EcbEncrypt(badKey2, val)
  20. assert.NotNil(t, err)
  21. dst, err := EcbEncrypt(key, val)
  22. assert.Nil(t, err)
  23. _, err = EcbDecrypt(badKey1, dst)
  24. assert.NotNil(t, err)
  25. _, err = EcbDecrypt(badKey2, dst)
  26. assert.NotNil(t, err)
  27. _, err = EcbDecrypt(key, val)
  28. // not enough block, just nil
  29. assert.Nil(t, err)
  30. src, err := EcbDecrypt(key, dst)
  31. assert.Nil(t, err)
  32. assert.Equal(t, val, src)
  33. block, err := aes.NewCipher(key)
  34. assert.NoError(t, err)
  35. encrypter := NewECBEncrypter(block)
  36. assert.Equal(t, 16, encrypter.BlockSize())
  37. decrypter := NewECBDecrypter(block)
  38. assert.Equal(t, 16, decrypter.BlockSize())
  39. dst = make([]byte, 8)
  40. encrypter.CryptBlocks(dst, val)
  41. for _, b := range dst {
  42. assert.Equal(t, byte(0), b)
  43. }
  44. dst = make([]byte, 8)
  45. encrypter.CryptBlocks(dst, valLong)
  46. for _, b := range dst {
  47. assert.Equal(t, byte(0), b)
  48. }
  49. dst = make([]byte, 8)
  50. decrypter.CryptBlocks(dst, val)
  51. for _, b := range dst {
  52. assert.Equal(t, byte(0), b)
  53. }
  54. dst = make([]byte, 8)
  55. decrypter.CryptBlocks(dst, valLong)
  56. for _, b := range dst {
  57. assert.Equal(t, byte(0), b)
  58. }
  59. _, err = EcbEncryptBase64("cTR0N3dDKkYtSmFOZFJnVWpYbjJyNXU4eC9BP0QK", "aGVsbG93b3JsZGxvbmcuLgo=")
  60. assert.Error(t, err)
  61. }
  62. func TestAesEcbBase64(t *testing.T) {
  63. const (
  64. val = "hello"
  65. badKey1 = "aaaaaaaaa"
  66. // more than 32 chars
  67. badKey2 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
  68. )
  69. key := []byte("q4t7w!z%C*F-JaNdRgUjXn2r5u8x/A?D")
  70. b64Key := base64.StdEncoding.EncodeToString(key)
  71. b64Val := base64.StdEncoding.EncodeToString([]byte(val))
  72. _, err := EcbEncryptBase64(badKey1, val)
  73. assert.NotNil(t, err)
  74. _, err = EcbEncryptBase64(badKey2, val)
  75. assert.NotNil(t, err)
  76. _, err = EcbEncryptBase64(b64Key, val)
  77. assert.NotNil(t, err)
  78. dst, err := EcbEncryptBase64(b64Key, b64Val)
  79. assert.Nil(t, err)
  80. _, err = EcbDecryptBase64(badKey1, dst)
  81. assert.NotNil(t, err)
  82. _, err = EcbDecryptBase64(badKey2, dst)
  83. assert.NotNil(t, err)
  84. _, err = EcbDecryptBase64(b64Key, val)
  85. assert.NotNil(t, err)
  86. src, err := EcbDecryptBase64(b64Key, dst)
  87. assert.Nil(t, err)
  88. b, err := base64.StdEncoding.DecodeString(src)
  89. assert.Nil(t, err)
  90. assert.Equal(t, val, string(b))
  91. }