QByteArray DES_ECB_encrypt(const QByteArray &key, const QByteArray &data)
{
DES_cblock keyEncrypt;
memset(keyEncrypt, 0, 8);
memcpy(keyEncrypt, key.constData(), static_cast<size_t>(key.length()));
// 密鑰置換
DES_key_schedule keySchedule;
DES_set_key_unchecked(&keyEncrypt, &keySchedule);
// 循環加密,每8字節一次
const_DES_cblock inputText;
DES_cblock outputText;
QByteArray array;
int data_len = data.length();
for (int i = 0; i < data_len / 8; ++i)
{
memcpy(inputText, data.constData() + i * 8, 8);
DES_ecb_encrypt(&inputText, &outputText, &keySchedule, DES_ENCRYPT);
for (int j = 0; j < 8; j++)
array.push_back(static_cast<char>( outputText[j] ));
}
if (data_len % 8 != 0)
{
int tmp1 = data.length() / 8 * 8;
int tmp2 = data.length() - tmp1;
memset(inputText, 0, 8);
memcpy(inputText, data.constData() + tmp1, static_cast<size_t>(tmp2) );
// 加密函數
DES_ecb_encrypt(&inputText, &outputText, &keySchedule, DES_ENCRYPT);
for (int j = 0; j < 8; j++)
array.push_back(static_cast<char>( outputText[j] ));
}
return array;
}