C语言【结构体值传递问题】

结构体值传递问题

这两天一直出现结构体成员值无法通过函数传递问题,由于项目需求,才刚开始写C,写的质量实在是太差劲了,最后也是成功解决了这个小问题。

结构体中包括明文、密文、IV、密钥等结构。在函数中调用SM加密算法,将值传递给结构体指针变量。

下面来看看(批评) 我的代码,

c 复制代码
typedef struct 
{
		uint32_t 	messageCmd;
		uint32_t 	keyidx;
		uint8_t 	keylen;
		uint32_t 	algID; 
		uint8_t 	pucIV[16];
		uint32_t	uiDataLength;   
    uint8_t * plaintext;      
    uint32_t  uiEncDataLength;
    BYTE * 		ciphertext; 		
} MSG_struct;

在函数中调用SM4_Encrypt

c 复制代码
int dataFrame_decode(Prot_struct *port_recv_struct)
{
		SM4_Encrypt((unsigned char *)test_data_key, plaintexxt, port_recv_struct->msg_struct.ciphertext, RNG_BUF_SIZE, 0, ALGMOD_ECB);
		unsigned char expected_cipher[16] = {
									0x0B, 0x6F, 0x8D, 0x59,
									0xBB, 0x72, 0x9C, 0x0D,
									0x0B, 0x73, 0xE6, 0xD9,
									0xCB, 0xCF, 0x3D, 0x2D
							};
		unsigned char test_data[16]={0};
		memcpy(test_data,encdata,16);
		int reslt = memcmp(encdata, expected_cipher, 16);
		return 0;
}

main.c代码

c 复制代码
MSG_struct msg = {
				.messageCmd				= cmd_SYM_Encrypt,
			  .keyidx           = 0x0,
			  .keylen           = 16,
			  .algID            = SGD_SM4_ECB,
			  .pucIV        		= {0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
														 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
			  .uiDataLength     = 16,
			  .plaintext        = (uint8_t *)data,
			  .uiEncDataLength  = 16,
			  .ciphertext 		  = NULL			
		};
		
		Prot_struct p_s1 = {0};
		p_s1.msg_head_struct = head;
		p_s1.msg_struct = msg;
		p_s1.msg_struct.ciphertext = (BYTE *)malloc(16);
		dataFrame_decode(&p_s1);

通过内存查看指针值port_recv_struct->msg_struct.ciphertext

通过内存查看指针值p_s1>msg_struct.ciphertext

SM4加密测试用例数据

  • 明文:0x31323334353637383930313233343536
  • 密钥:0xA9087EB16C246ED3BE8DAAE737D672ED
  • 加密模式:ECB
  • IV:0或者NULL
  • 密文:0x0B6F8D59BB729C0D0B73E6D9CBCF3D2D
相关推荐
dialect_6 小时前
KMP算法
开发语言·c++·算法
总要学点什么7 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
开开心心_Every8 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c9 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
吴卫斌9 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
·present·9 小时前
CSAPP(Bomb lab)
c语言·c++
超级架构师10 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
叼烟扛炮10 小时前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
LMT流氓兔11 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
专注仿真11 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法