实验二-密码引擎-3-sdf接口

实验二-密码引擎-3-sdf接口

任务详情:两人一组完成下面任务

  • 分析代码接口和智能钥匙的接口的异同
  • 编译运行附件中代码,提交运行结果截图
  • 修改test.c完成包含小组内成员的学号姓名的文件的sm3 hash运算,sm4加密解密,提交代码和运行结果截图。
  • 完成完成包含小组内成员的学号姓名的文件的签名验签名,提交代码和运行结果截图。

分析代码接口和智能钥匙的接口的异同

代码接口和智能钥匙的接口都属于技术接口的范畴,但它们服务于不同的功能和目的。下面我将详细介绍它们的异同:

代码接口(Programming Interface):

通常指软件组件之间进行交互的方式,例如API(应用程序编程接口)或者库中的函数调用。

智能钥匙的接口:

通常指物理设备或系统中,用于控制和管理智能钥匙(如智能门锁的钥匙、车钥匙等)的接口。这种接口可能涉及软件和硬件的交互。

目的和用途

代码接口:目的在于提供一种标准化的方法来访问或使用一个软件组件的功能,使得开发者不需要了解底层的详细实现即可利用这些功能。
智能钥匙的接口:主要用于提供安全的方式来控制和访问物理设施或设备,如门禁系统或车辆。

异同点

相同点:
标准化:两者都需要遵循一定的标准或协议,以确保兼容性和安全性。
交互:无论是代码接口还是智能钥匙的接口,都涉及到用户与系统或系统组件之间的交互。
不同点:
实现方式:
代码接口:通常是逻辑性的,涉及软件代码,如函数、类或API端点。
智能钥匙的接口:可能包括软件和硬件组件,如无线技术(NFC、蓝牙)、物理连接器或专用APP等。
安全特性:
代码接口:安全性主要关注数据保护、防止未授权访问和确保代码执行的安全性。
智能钥匙的接口:安全性更侧重于物理安全和数据加密,确保只有授权用户才能操作或访问特定设备或位置。
用户群体:
代码接口:主要针对开发者和技术人员。
智能钥匙的接口:面向广大消费者,尤其是非技术用户。
总的来说,代码接口和智能钥匙的接口虽然都是实现设备间通讯或操作的方式,但它们的技术实现、安全考虑以及目标用户群体有很大差异。

密码应用接口规范实例:

(正版) GMT0016-2012智能密码钥匙密码应用接口规范 - 道客巴巴 http://www.doc88.com/p-6824784180799.html

编译运行附件中代码,提交运行结果截图

image

修改test.c完成包含小组内成员的学号姓名的文件的sm3 hash运算,sm4加密解密,提交代码和运行结果截图

image
sm3

点击查看代码
SGD_RV SGD_SM3Hash(SGD_HANDLE phSessionHandle)
{
SGD_RV rv = SDR_OK;
ECCrefPublicKey phPubKey;
memcpy(phPubKey.x,pubKey,32);
memcpy(phPubKey.y,pubKey+32,32);
SGD_UCHAR pucID[16] =
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
0x08};
SGD_UINT32 uiIDLen = 16;
SGD_UINT8 pucData[16] ="20211314";
SGD_UINT32 uiPucDateLen = 16;
printf("pucData = %s\n",pucData);
//rv = SDF_HashInit(phSessionHandle,SGD_SM3,&phPubKey,pucID,uiIDLen);
rv = SDF_HashInit(phSessionHandle,SGD_SM3,NULL,NULL,0);
if(SDR_OK != rv)
{
return rv;
}
rv = SDF_HashUpdate(phSessionHandle,pucData,uiPucDateLen);
if(SDR_OK != rv)
{
return rv;
}
uiPucDateLen =32;
rv = SDF_HashFinal(phSessionHandle,sm3HashData,&uiPucDateLen);
printf("sm3HashData = %s\n",sm3HashData);
if(SDR_OK != rv)
{
return rv;
}
return SDR_OK;
}

sm4加解密
点击查看代码
SGD_RV SM4_ENC_DEC_ECB(SGD_HANDLE phSessionHandle,SGD_HANDLE phKeyHandle)
{
SGD_RV rv = SDR_OK;
int loop = LOOP, i = 0;
SGD_UCHAR pucIV[16] ={0};
memset(pucIV, 1, 16);
SGD_UCHAR *pucData = (SGD_UCHAR*)malloc(loop * MAX);
SGD_UINT32 uiDataLength = 32;
SGD_UCHAR *pucEncData = (SGD_UCHAR*)malloc(loop * MAX);
SGD_UINT32 puiEncDataLength = loop * MAX;
SGD_UCHAR pucKey[16];
memset(pucKey,2,16);
int count = loop;
pucData = "20211314wangyida20211314wangyida";
printf("pucData = %s\n", pucData);
rv = SDF_Encrypt( phSessionHandle,pucKey, SGD_SM4_ECB,pucIV, pucData,
uiDataLength, pucEncData, &puiEncDataLength);
if(SDR_OK != rv)
{
printf("erro\n");
free(pucData);
free(pucEncData);
return rv;
}
printf("pucEncData = %s\n", pucEncData);
SGD_UCHAR *pucTmpData = (SGD_UCHAR*)malloc(loop * MAX);
memset(pucIV,1,16);
rv = SDF_Decrypt(phSessionHandle,pucKey, SGD_SM4_ECB, pucIV, pucEncData,
32, pucTmpData, &puiEncDataLength);
if(SDR_OK != rv)
{
free(pucData);
free(pucEncData);
free(pucTmpData);
return rv;
}
printf("pucTmpData = %s\n", pucTmpData);
if(memcmp(pucData,pucTmpData,32))
{
free(pucData);
free(pucEncData);
free(pucTmpData);
printf("memcmp diff\n");
return -1;
}
free(pucData);
free(pucEncData);
free(pucTmpData);
return SDR_OK;
}

完成包含小组内成员的学号姓名的文件的签名验签名

image

posted @ 2024-04-17 14:43  sjbdjb  阅读(112)  评论(0)    收藏  举报