openssl實現des ecb加密

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;

}

發佈了27 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章