TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
aeswrapper.cpp
Go to the documentation of this file.
1 #include "aeswrapper.h"
2 #include "base64.h"
3 #include "aes.h"
4 
5 static constexpr int DATA_CACHE_SIZE = 1024;
6 
7 QByteArray QAlgorithm::Aes::encryptECB(const QByteArray &in, const QByteArray &key)
8 {
9  AES_KEY aes;
10  char encryptString[DATA_CACHE_SIZE] = {0};
11  const int length = in.length();
12  const int bei = length / AES_BLOCK_SIZE + 1;
13  const int total = bei * AES_BLOCK_SIZE;
14  char *encStr = new char[total + 1]();
15 
16  const int nNumber = (length % AES_BLOCK_SIZE > 0) ? total - length : AES_BLOCK_SIZE;
17 
18  memset(encStr, nNumber, total);
19  memcpy(encStr, in.data(), length);
20 
21  if(AES_set_encrypt_key((const unsigned char *)key.data(), 128, &aes) < 0)
22  {
23  delete[] encStr;
24  return {};
25  }
26 
27  AES_ecb_encrypt((const unsigned char *)encStr, (unsigned char *)encryptString, &aes, AES_ENCRYPT);
28  delete[] encStr;
29 
30  const TTKString &str = QAlgorithm::base64Encode((const unsigned char *)encryptString, total);
31  return QByteArray(str.data(), str.length());
32 }
33 
34 QByteArray QAlgorithm::Aes::decryptECB(const QByteArray &in, const QByteArray &key)
35 {
36  AES_KEY aes;
37  char decryptString[DATA_CACHE_SIZE] = {0};
38  const TTKString &str = QAlgorithm::base64Decode(TTKString(in.data(), in.length()));
39 
40  if(AES_set_decrypt_key((const unsigned char *)key.data(), 128, &aes) < 0)
41  {
42  return {};
43  }
44  AES_ecb_encrypt((const unsigned char *)str.data(), (unsigned char *)decryptString, &aes, AES_DECRYPT);
45 
46  return QByteArray(QString(decryptString).remove("\x0F").toUtf8());
47 }
48 
49 QByteArray QAlgorithm::Aes::encryptCBC(const QByteArray &in, const QByteArray &key, const QByteArray &iv)
50 {
51  AES_KEY aes;
52  char encryptString[DATA_CACHE_SIZE] = {0};
53  const int length = in.length();
54  const int bei = length / AES_BLOCK_SIZE + 1;
55  const int total = bei * AES_BLOCK_SIZE;
56  char *encStr = new char[total + 1]();
57 
58  const int nNumber = (length % AES_BLOCK_SIZE > 0) ? total - length : AES_BLOCK_SIZE;
59 
60  memset(encStr, nNumber, total);
61  memcpy(encStr, in.data(), length);
62 
63  if(AES_set_encrypt_key((const unsigned char *)key.data(), 128, &aes) < 0)
64  {
65  delete[] encStr;
66  return {};
67  }
68 
69  AES_cbc_encrypt((const unsigned char *)encStr, (unsigned char *)encryptString, total, &aes, (unsigned char *)iv.data(), AES_ENCRYPT);
70  delete[] encStr;
71 
72  const TTKString &str = QAlgorithm::base64Encode((const unsigned char *)encryptString, total);
73  return QByteArray(str.data(), str.length());
74 }
75 
76 QByteArray QAlgorithm::Aes::decryptCBC(const QByteArray &in, const QByteArray &key, const QByteArray &iv)
77 {
78  AES_KEY aes;
79  char decryptString[DATA_CACHE_SIZE] = {0};
80  const TTKString &str = QAlgorithm::base64Decode(TTKString(in.data(), in.length()));
81 
82  if(AES_set_decrypt_key((const unsigned char *)key.data(), 128, &aes) < 0)
83  {
84  return {};
85  }
86  AES_cbc_encrypt((const unsigned char *)str.data(), (unsigned char *)decryptString, str.length(), &aes, (unsigned char *)iv.data(), AES_DECRYPT);
87 
88  return QByteArray(QString(decryptString).remove("\x0F").toUtf8());
89 }
static constexpr int DATA_CACHE_SIZE
Definition: aeswrapper.cpp:5
int AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key)
Expand the cipher key into the decryption key schedule.
Definition: aes_core.cpp:732
int AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key)
Expand the cipher key into the encryption key schedule.
Definition: aes_core.cpp:631
static constexpr wchar_t key[]
#define AES_DECRYPT
Definition: aes.h:20
void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key, const int enc)
Definition: aes_ecb.cpp:15
TTKString base64Decode(const TTKString &bytes)
Definition: base64.cpp:66
TTKString base64Encode(const unsigned char *bytes, unsigned int len)
Definition: base64.cpp:16
std::string TTKString
Definition: ttkglobal.h:121
Definition: aes.h:30
void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc)
Definition: aes_cbc.cpp:4
#define AES_ENCRYPT
Definition: aes.h:19
#define AES_BLOCK_SIZE
Definition: aes.h:27
QByteArray encryptECB(const QByteArray &in, const QByteArray &key)
Definition: aeswrapper.cpp:7
QByteArray decryptCBC(const QByteArray &in, const QByteArray &key, const QByteArray &iv)
Definition: aeswrapper.cpp:76
QByteArray encryptCBC(const QByteArray &in, const QByteArray &key, const QByteArray &iv)
Definition: aeswrapper.cpp:49
QByteArray decryptECB(const QByteArray &in, const QByteArray &key)
Definition: aeswrapper.cpp:34