Crypto.hpp
1 //
2 // Created by xiong on 2022/6/9.
3 //
4 
5 #ifndef EMX_Crypto_HPP
6 #define EMX_Crypto_HPP
7 
8 #include "core/aes/aes.hpp"
9 #include <cstdint>
10 #include <cstring>
11 #include <string>
12 
13 namespace Emx {
19  class AES_CBC {
20  public:
21  AES_CBC() { memset(&m_ctx, 0, sizeof(m_ctx)); }
22 
28  void Init(const uint8_t *key, const uint8_t *iv);
29 
35  void Encrypt(uint8_t *buf, size_t length);
36 
42  void Decrypt(uint8_t *buf, size_t length);
43 
44  private:
45  struct AES_ctx m_ctx;
46  };
47 
49  class XXTEA {
50  public:
51  static const uint32_t m_teaKey[4];
52  static const uint32_t m_delta;
53 
61  static void Encrypt(uint32_t *v, int n, const uint32_t key[4] = m_teaKey, uint32_t delta = m_delta);
62 
70  static void Decrypt(uint32_t *v, int n, const uint32_t key[4] = m_teaKey, uint32_t delta = m_delta);
71  };
72 
76  class Pkcs7Padding {
77  public:
82  static void Pad(std::string &data);
83 
93  static int Pad(uint8_t *in, int inSize, uint8_t *out, int &outSize);
94 
99  static void UnPad(std::string &data);
100 
108  static int UnPad(uint8_t *data, int &size);
109  };
110 
111  class AesKey {
112  public:
113  static void Encode(const uint8_t *key, const uint8_t *iv, std::string &base64);
114 
115  static void Decode(const std::string &base64, uint8_t *key, uint8_t *iv);
116  };
118 }
119 
120 #endif //EMX_Crypto_HPP
用于数据的AES CBC模式的加解密
Definition: Crypto.hpp:19
void Decrypt(uint8_t *buf, size_t length)
对数据进行解密,需要保证数据16字节对齐
AES_CBC()
Definition: Crypto.hpp:21
void Encrypt(uint8_t *buf, size_t length)
对数据进行加密,需要保证数据16字节对齐
void Init(const uint8_t *key, const uint8_t *iv)
初始化AES的上下文
Definition: Crypto.hpp:111
static void Decode(const std::string &base64, uint8_t *key, uint8_t *iv)
static void Encode(const uint8_t *key, const uint8_t *iv, std::string &base64)
Pkcs7填充与去填充
Definition: Crypto.hpp:76
static int UnPad(uint8_t *data, int &size)
去掉填充
static void UnPad(std::string &data)
去掉填充
static int Pad(uint8_t *in, int inSize, uint8_t *out, int &outSize)
填充
static void Pad(std::string &data)
填充
用于AES的key和iv的加解密
Definition: Crypto.hpp:49
static void Decrypt(uint32_t *v, int n, const uint32_t key[4]=m_teaKey, uint32_t delta=m_delta)
使用teaKey解码出aes的key和iv
static const uint32_t m_delta
Definition: Crypto.hpp:52
static const uint32_t m_teaKey[4]
Definition: Crypto.hpp:51
static void Encrypt(uint32_t *v, int n, const uint32_t key[4]=m_teaKey, uint32_t delta=m_delta)
使用aes的key和iv编码出teaKey
Definition: EmxGpio.hpp:10