开发者
资源
文档评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

SM4-ECB、SM4-CBC加解密设置Padding

SM4算法默认为PKCS7 padding模式,如果需要设置其他padding模式,需要调用Init接口两次,第一次不传key和iv(传NULL),然后调用EVP_CIPHER_CTX_ctrl接口设置padding,然后再次调用Init接口传key和iv,以下是代码示例:

    EVP_DecryptInit_ex(dctx, EVP_sm4_cbc(), g_engine, NULL, NULL); // 第一次Init,什么都不传
    ASSERT(EVP_CIPHER_CTX_ctrl(dctx, EVP_CTRL_BLOCK_PADDING_MODE, EVP_PADDING_PKCS7, NULL) == 1,"set dctx padding success"); // 设置padding
    EVP_DecryptInit_ex(dctx, EVP_sm4_cbc(), g_engine, g_key16, g_iv16);
    EVP_DecryptUpdate(dctx, dt, &outl, ct, 32);
    totl = outl;
    EVP_DecryptFinal_ex(dctx, dt + totl, &outl);
    totl += outl;
    EVP_CIPHER_CTX_free(dctx);

注:PKCS7 padding会在输入数据为整数个块的时候填充一整块,请提前分配好内存。