
int openssl_sm4_ecb() {
unsigned char out[16] = { 0 };
int outlen = 0,tmplen = 0;;
EVP_CIPHER_CTX* ctx = NULL;
ctx = EVP_CIPHER_CTX_new();
EVP_EncryptInit(ctx, EVP_sm4_ecb(),(unsigned char *)"1111111111111111", NULL);
EVP_CIPHER_CTX_set_padding(ctx, 0);
if (!EVP_EncryptUpdate(ctx, out,&outlen, (unsigned char*)"1111111111111111", strlen("1111111111111111")))
{
EVP_CIPHER_CTX_free(ctx);
return -1;
}
printf("outlen:%d\r\n",outlen);
if (!EVP_EncryptFinal(ctx, out+outlen , &tmplen))
{
EVP_CIPHER_CTX_free(ctx);
return -2;
}
EVP_CIPHER_CTX_free(ctx);
outlen += tmplen;
printf("sm4 ecb: ");
for (int i = 0; i < outlen; i++) {
printf("%02x", out[i]);
}
printf("\n");
return 0;
}
int openssl_sm4_cbc() {
unsigned char out[16] = { 0 };
int outlen = 0, tmplen = 0;;
EVP_CIPHER_CTX* ctx = NULL;
ctx = EVP_CIPHER_CTX_new();
EVP_EncryptInit(ctx, EVP_sm4_cbc(), (unsigned char*)"1111111111111111", (unsigned char*)"1111111111111111");
EVP_CIPHER_CTX_set_padding(ctx, 0);
if (!EVP_EncryptUpdate(ctx, out, &outlen, (unsigned char*)"1111111111111111", strlen("1111111111111111")))
{
EVP_CIPHER_CTX_free(ctx);
return -1;
}
printf("outlen:%d\r\n", outlen);
if (!EVP_EncryptFinal(ctx, out + outlen, &tmplen))
{
EVP_CIPHER_CTX_free(ctx);
return -2;
}
EVP_CIPHER_CTX_free(ctx);
outlen += tmplen;
printf("sm4 cbc: ");
for (int i = 0; i < outlen; i++) {
printf("%02x", out[i]);
}
printf("\n");
return 0;
}