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会在输入数据为整数个块的时候填充一整块,请提前分配好内存。
父主题: 常见问题