---
title: SM4-ECB、SM4-CBC加解密设置Padding
description: "SM4算法默认为PKCS7 padding模式，如果需要设置其他padding模式，需要调用Init接口两次，第一次不传key和iv（传NULL），然后调用EVP_CIPHER_CTX_ctrl接口设置padding，然后再次调用Init接口传key和iv，以下是代码示例："
url: https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/cca/devg/Kunpeng_ommercialcryptography_16_0048.html
sourcePath: /source/zh/kunpengcctrustzone/cca/devg/Kunpeng_ommercialcryptography_16_0048.html
indexId: c052df32e3e37ab4ff625672ee83d8c2ecbfe351c00107f17244096cba4bb3c081
---
# 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会在输入数据为整数个块的时候填充一整块，请提前分配好内存。
