首页 > 其他分享 >20211314实验二-密码引擎-3-sdf接口

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

时间:2024-04-15 21:23:19浏览次数:29  
标签:rv pucData OK SDR 接口 sdf 20211314 SGD

任务详情

两人一组完成下面任务

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

一、代码接口

代码接口通常指的是在软件开发中,不同模块或组件之间进行交互的约定和规范。它定义了数据的输入和输出格式、调用方式以及预期的行为。代码接口的主要目的是实现软件的模块化、可重用性和可扩展性。

特点:

数据交互:代码接口主要处理数据的输入和输出,确保数据在不同模块之间的传递是准确和一致的。
调用方式:代码接口定义了函数、方法或类等的调用方式,包括参数列表、返回值类型和可能的异常处理等。
模块化:通过定义代码接口,可以将复杂的软件系统拆分成多个独立的模块,每个模块负责特定的功能,降低系统的复杂性。
可扩展性:代码接口使得新功能的添加或现有功能的修改更加容易,因为只需要修改或扩展接口的实现,而不需要修改其他模块的代码。

二、智能钥匙接口

智能钥匙接口通常指的是智能钥匙与车辆或其他设备之间进行通信和交互的接口。它允许用户通过智能钥匙实现远程解锁、启动车辆、设置安全警报等功能。

特点:

通信协议:智能钥匙接口基于特定的通信协议(如蓝牙、RFID等)实现与车辆或其他设备的通信。
功能实现:智能钥匙接口提供了一系列功能,如解锁车门、启动发动机、设置警报等,以满足用户对车辆安全和便捷性的需求。
安全性:智能钥匙接口需要保证通信的安全性,防止非法访问和恶意攻击。因此,它通常采用加密技术来保护数据的传输和存储。
用户体验:智能钥匙接口的设计需要考虑到用户的使用习惯和体验,确保操作的便捷性和直观性。
异同点分析:

相同点:

两者都是接口,用于实现不同实体之间的交互和通信。
在设计和实现过程中,都需要考虑数据的准确性、安全性和可靠性。
不同点:

目的和功能:代码接口主要用于实现软件的模块化、可重用性和可扩展性;而智能钥匙接口则主要用于实现车辆的安全和便捷性控制。
使用场景:代码接口广泛应用于软件开发领域;而智能钥匙接口则主要应用于汽车、智能家居等物联网领域。
实现方式:代码接口通常通过编程语言和数据结构来实现;而智能钥匙接口则依赖于特定的通信协议和硬件设备来实现。

在本项目初期,团队成员通过学习国密标准,明白国密标准下的c语言的编写规范,本次我们主要研究
《智能密码钥匙密码应用接口规范》(GM/T 0016-2012)和《密码设备应用接口规范》(GM/T 0018-
2012)这两个国密标准的实现与相互转换。
在0016标准中,其密码应用接口位于智能密码钥匙应用程序与设备之间。
并且在一个设备中存在设备认证和多个应用,应用之间相互独立。


即在使用中密码设备需要打开不同的应用会话来完成不同功能的实现。
而在0018标准中,并没有为密码设备设置多个应用,使用只需打开设备并且打开一个会话即可。
在公钥密码基础设施应用技术体系框架中,密码设备服务层由密码机、密码卡、智能密码终端等设备组
成,通过0018标准规定的密码设备应用接口向通用密码服务层提供基础密码服务。

在0018和0016标准中,均有国密算法加密解密的实现函数和证书的验签。但在深入学习之下,发现0016
标准内容更加详细,包含了设备的访问控制的模块,其中包含设备认证,PIN的修改、校验、解锁,和对
于各种不同应用容器的管理模块,其中包含容器的创建、删除、枚举、打开、关闭等。

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

修改test.c完成包含小组内成员的学号姓名的文件的sm3 hash运算,sm4加密解密

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;
}

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

SGD_RV SM2SignVer(SGD_HANDLE phSessionHandle)
{
SGD_RV rv = SDR_OK;
#define COUNT 100
ECCSignature Signature ;
int i = 0;
SGD_UINT8 Data[32]="20211314202113142021131420211314";
printf("\n\nsm2签名验签:\n");
printf("date = %s\n" ,Data);
rv = SDF_InternalSign_ECC(phSessionHandle,1,Data,32,&Signature);
if(SDR_OK != rv)
{
printf("SDF_InternalSign_ECC failed rv = 0x%08x\n", rv);
return rv;
}
rv = SDF_InternalVerify_ECC(phSessionHandle,1,Data,32,&Signature);
if(SDR_OK != rv)
{
printf("SDF_InternalVerify_ECC failed rv = 0x%08x\n", rv);
return rv;
}
printf("Sign、Verify success!\n");
return SDR_OK;
}

标签:rv,pucData,OK,SDR,接口,sdf,20211314,SGD
From: https://www.cnblogs.com/bestiwyd/p/18135651

相关文章

  • java中接口多个实现类,如何指定实现类,根据子类类型选择实现方法
    问题背景在Java代码中,经常会遇到一个接口有多个实现的情况。而这些实现类的参数又是不同的子类,这时候我们该如何选择正确的实现方法呢?解决方案我们可以通过判断参数的子类类型来选择正确的实现方法。具体实现可以使用Java中的instanceof关键字,它可以判断一个对象是否是某个类的......
  • 视频汇聚/安防监控平台EasyCVR调试pprof接口信息泄露如何处理?
    EasyCVR视频融合平台基于云边端架构,可支持海量视频汇聚管理,能提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。平台兼容性强,支持多协议、多类型设备接入,包括:国标GB/T28181协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SD......
  • Linux 64位内核(arm64)驱动兼容32位应用程序(armhf)的ioctl接口
    最近,公司来了一次硬件升级,开发平台从全志T3(armhf)升级到全志T527(arm64),平台迁移后,想直接使用原来动态库和应用程序从而减少开发量,用户态大部分接口都运行正常,唯独ioctl接口无法调用成功。如果要成功移植要做到以下几点:1.驱动要同时实现unlocked_ioctl和compat_ioctl。str......
  • ABP -Vnext框架一步一步入门落地教程——使用ABP -Vnext创建一个WEBAPI接口(二)
    人生需要指引,而复制是成功最快的方式,兄弟们让我们发车吧————代码大牛ljy开发主题:何谓开发应用服务端在官方开发教程这一段的内容叫做开发应用服务端,作为现在前后端分离的开发模式来说,一个应用就分为前端页面框架和后端API,页面框架调用WEBAPI实现业务就完事了。所以咱们今天......
  • 利用Sqlmap API接口联动Google Hacking批量SQL注入检测
    目录前言slghack自动化搜集URLSqlmapAPI脚本slghack_sqli前言挖掘SQL注入漏洞的一种方式就是通过GoogleHacking搜索那些可能存在SQL的URL,然后手工的探测注入点。但是现在的SQL注入漏洞的网站是比较少的了,所以这样一个一个手工测效率有一点低。sqlmap比较好的一点是可批量扫描......
  • Java调用第三方接口获取数据并存储,思路加代码
    思路:1.根据第三方接口返回的字段来创建实体类,用来接收数据2.建立连接,提供两种方式。来获取数据3.实体类转换并存储方法一:URL建立连接进行接收数据依赖<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifa......
  • 10-接口测试工具(PostMan和ApiPost)
    在前后端分离的开发模式下,通常需要使用接口测试工具进行开发,这里介绍两种比较好用的1)PostManPostman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件,常用于接口测试官方下载网址:DownloadPostman|GetStartedforFree安装教程:PostMan——安装使用教程(图文详解)_po......
  • jmeter工具做接口测试
    jmeter工具做接口测试●测试计划:测试起点,所有组件的容器●线程组:代表一定数量的用户,发送请求●取样器:向服务器发送请求的最小单元●逻辑控制器:结合取样器实现一些复杂的逻辑(循环控制器)●前置处理器:在请求之前的工作●后置处理器:在请求之后的工作(json提取器)●断......
  • 点阵数显驱动IC/抗干扰数显驱动VK1650 SOP16/DIP16,内部集成有MCU数字接口、数据锁存
    产品品牌:永嘉微电/VINKA产品型号:VK1650封装形式:SOP16/DIP16概述VK1650是一种带键盘扫描电路接口的LED驱动控制专用芯片,内部集成有数据锁存器、LED驱动、键盘扫描等电路。SEG脚接LED阳极,GRID脚接LED阴极,可支持8SEGx4GRID的点阵LED显示。最大支持7x4按键。本芯片性能稳定质量......
  • 我的小程序接口被刷爆了
    ​自然流量的惊喜   书接上文,凭着短视频的好奇,搭了个小程序,做了文案提取,配音等功能,也顺带写了两篇口水文章,不曾想居然收获历史最高的点赞与收藏。有兴趣的朋友可以点这里一看究尽:《短视频配音原来如此简单》,《短视频文案提取的简单实现》。做为一个食人间烟火的程序员,也偷......