int openssl_sm3() {EVP_MD_CTX* mdctx;const EVP_MD* mdfunc;unsigned char md_value[EVP_MAX_MD_SIZE];unsigned int md_len, i;// 初始化MD5函数mdfunc = EVP_sm3();if (!mdfunc) {printf("sm3 algorithm not available\n");return -1;}// 创建MD5上下文mdctx = EVP_MD_CTX_new();if (!mdctx) {printf("Memory allocation failure\n");return -1;}// 初始化MD5上下文,指定使用的摘要算法if (1 != EVP_DigestInit_ex(mdctx, mdfunc, NULL)) {printf("Digest initialization failed\n");EVP_MD_CTX_free(mdctx);return -1;}// 提供数据以进行摘要计算if (1 != EVP_DigestUpdate(mdctx, "123", strlen("123"))) {printf("Digest update failed\n");EVP_MD_CTX_free(mdctx);return -1;}// 完成摘要计算if (1 != EVP_DigestFinal_ex(mdctx, md_value, &md_len)) {printf("Digest finalization failed\n");EVP_MD_CTX_free(mdctx);return -1;}// 清理资源EVP_MD_CTX_free(mdctx);printf("sm3: ");for (int i = 0; i < md_len; i++) {printf("%02x", md_value[i]);}printf("\n");return 0;
}