openssl编程之sm4算法代码示例

image



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;

}
posted @ 2025-09-09 17:55  我不是萧海哇~~~  阅读(18)  评论(0)    收藏  举报