openssl编程之sm3哈希代码示例


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;
}
posted @ 2025-09-10 15:08  我不是萧海哇~~~  阅读(18)  评论(0)    收藏  举报