sdf 测试-1

news/2024/11/16 15:46:11/文章来源:https://www.cnblogs.com/20211115fyq/p/18201236

在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,参考网内容 和AI要给出详细过程,否则不得分。

  1. 根据gmt0018标准,推导sdf的接口调用模式,比如调用SDF_GenerateRandom,还应调用其他什么函数,调用顺序是什么,给出结论和推导过程。(10‘)
  2. 使用龙脉智能钥匙定义一个私有函数 static int getRandom(char *r, int length), 获取length个字节的随机数(5‘)
  3. 把上述函数集成到src中的sdf.c中的SDF_GenerateRandom中(5')
  4. 在test中的main.c调用SDF_GenerateRandom进行测试,至少测试1个字节,5个字节,20个字节三种情况。(5‘)
  5. 提交代码(或代码链接)和运行结果截图

过程

  1. 答:
  • 建立连接(如果尚未建立):在应用与密码设备之间建立通信连接。这通常是一个底层的操作,可能不直接对应于一个SDF接口函数。
  • 验证设备状态(可选):在调用具体功能之前,验证设备的状态是否正常。这可以通过调用一个状态查询函数来实现,但GMT0018或SDF标准可能并没有定义这样的函数。
  • 调用SDF_GenerateRandom:根据应用的需求,调用SDF_GenerateRandom函数来生成随机数。这个函数可能需要一些参数,如随机数的长度等。
  • 检查返回值:在调用SDF_GenerateRandom后,检查函数的返回值以确定是否成功生成了随机数。如果发生错误,采取相应的错误处理措施。
  • 释放资源(如果需要):如果SDF_GenerateRandom涉及到资源的管理,那么在调用完成后需要释放这些资源。然而,由于SDF_GenerateRandom本身可能并不涉及资源的分配和释放,这一步可能是可选的。

需要注意的是,上述调用模式是一个简化的示例,并不一定适用于所有的SDF接口和所有的密码设备。实际上,SDF接口的具体实现和调用方式可能因设备类型、应用场景等因素而有所不同。

`#include <hsm_sdk_header.h> // 假设这是HSM SDK的头文件  // 假设HSM SDK提供了以下函数和类型  // HSM_Context: HSM连接上下文类型  
// HSM_Initialize: 初始化HSM连接的函数  
// HSM_GenerateRandom: 生成随机数的函数  
// HSM_Close: 关闭HSM连接的函数  // 私有函数:从HSM获取指定长度的随机数  
static int getRandom(char *r, int length) {  
HSM_Context ctx; // HSM连接上下文  
int result = 0; // 函数返回值,0表示成功,非0表示失败  // 初始化HSM连接  
result = HSM_Initialize(&ctx);  
if (result != 0) {  // 处理错误  return result;  
}  // 生成随机数  
result = HSM_GenerateRandom(ctx, r, length);  
if (result != 0) {  // 处理错误  HSM_Close(ctx); // 关闭连接(如果有必要)  return result;  
}  // 关闭HSM连接  
HSM_Close(ctx);  // 成功返回  
return 0;  
}  // 主函数或其他调用getRandom函数的地方  
int main() {  
char randomBytes[32]; // 假设我们要获取32字节的随机数  
int result = getRandom(randomBytes, sizeof(randomBytes));  
if (result == 0) {  // 成功获取随机数,可以在这里使用randomBytes  
} else {  // 处理错误  
}  
return 0;  
}`

` // sdf.h
#ifndef SDF_H
#define SDF_H

 // ... 其他声明 ...  int SDF_GenerateRandom(char *r, int length);  // ... 其他声明 ...  #endif // SDF_H// sdf.c  #include <stdio.h>  #include "sdf.h"  #include "hsm_sdk_header.h" // 假设这是HSM SDK的头文件  // 假设这是你从HSM SDK获得的或自己实现的getRandom函数  static int getRandom(char *r, int length) {  
// ... 使用HSM SDK的函数来生成随机数,并填充到r中 ...  
// 这里只是一个示例,你需要用实际的代码替换它  
for (int i = 0; i < length; i++) {  r[i] = 'A' + (rand() % 26); // 这不是安全的随机数生成方式,仅用于示例  
}  
return 0; // 假设总是成功  

}

 int SDF_GenerateRandom(char *r, int length) {  
// 调用getRandom函数来获取随机数  
int result = getRandom(r, length);  
if (result != 0) {  // 处理错误(如果需要的话)  fprintf(stderr, "Error generating random number.\n");  return -1; // 或其他错误码  
}  // 如果一切正常,返回成功  
return 0;  

}

// ... 其他函数的实现 ...

CC=gcc
CFLAGS=-I/path/to/hsm_sdk/include
LDFLAGS=-L/path/to/hsm_sdk/lib -lhsm_sdk

all: my_program

my_program: sdf.o other_files.o
$(CC) $(LDFLAGS) -o $@ $^

sdf.o: sdf.c sdf.h
$(CC) $(CFLAGS) -c $< -o $@

... 其他编译规则 ...

clean:
rm -f *.o my_program
`

` // test/main.c
#include <stdio.h>
#include <string.h>
#include "../sdf.h" // 假设sdf.h在上一级目录中

 // 辅助函数:打印字节数组  void print_bytes(const char *bytes, int length) {  
for (int i = 0; i < length; i++) {  printf("%02X ", (unsigned char)bytes[i]);  
}  
printf("\n");  }  int main() {  
// 测试1个字节的随机数  
char r1[1];  
if (SDF_GenerateRandom(r1, 1) == 0) {  printf("1 byte random number: ");  print_bytes(r1, 1);  
} else {  printf("Failed to generate 1 byte random number.\n");  
}  // 测试5个字节的随机数  
char r5[5];  
if (SDF_GenerateRandom(r5, 5) == 0) {  printf("5 bytes random number: ");  print_bytes(r5, 5);  
} else {  printf("Failed to generate 5 bytes random number.\n");  
}  // 测试20个字节的随机数  
char r20[20];  
if (SDF_GenerateRandom(r20, 20) == 0) {  printf("20 bytes random number: ");  print_bytes(r20, 20);  
} else {  printf("Failed to generate 20 bytes random number.\n");  
}  return 0;  

}
`

运行截图

插上龙脉key后显示如下:
image
image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/709062.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring 对于事务上的应用的详细说明

1. Spring 对于事务上的应用的详细说明 @目录1. Spring 对于事务上的应用的详细说明每博一文案2. 事务概述3. 引入事务场景3.1 第一步:准备数据库表3.2 第二步:创建包结构3.3 第三步:准备对应数据库映射的 Bean 类3.4 第四步:编写持久层3.5 第五步:编写业务层3.6 第六步:…

日常Bug排查-偶发性读数据不一致

日常Bug排查-偶发性读数据不一致 前言 日常Bug排查系列都是一些简单Bug的排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材。 Bug现场 业务场景 先描述这个问题出现的业务场景。这是一个支付的场景,如果支付成功了,我们就把支付状态置为success(主单据更新)同…

多线程和多进程 - 初窥

一、说明 在平常工作中,我们使用top命令查看一台linux服务器的cpu使用情况时,会发现某个进程的cpu使用率会超过100%,这是为什么? 二、举例 实验环境为 CentOS7.6 + Python2.7 1. 多线程、多进程在操作系统中的表现形式 我们首先看两个例子,test1.py和test2.py,都是执行死…

EDP .Net开发框架--权限

EDP是一套集组织架构,权限框架【功能权限,操作权限,数据访问权限,WebApi权限】,自动化日志,动态Interface,WebApi管理等基础功能于一体的,基于.net的企业应用开发框架。通过友好的编码方式实现数据行、列权限的管控。平台下载地址:https://gitee.com/alwaysinsist/edp…

两台数据库在数据写入时性能的差异

介绍:我有两台数据库,分别称为200和203,200和203的服务器性能配置相当,203的配置甚至还要好一点。都是安装的centos7.7,oracle 19C,均已开日志归档,这两台服务器在同一个机房,同一个网段。当我在本地使用JDBC去往这两个数据库分别插入10w条记录,每插入一条提交一次,2…

【一步步开发AI运动小程序】十七、如何识别用户上传视频中的运动、动作、姿态?

【云智AI运动识别小程序插件】,可以为您的小程序,赋于人体检测识别、运动检测识别、姿态识别检测AI能力。本地原生识别引擎,内置10余个运动,无需依赖任何后台或第三方服务,有着识别速度快、体验佳、扩展性强、集成快、成本低的特点,本篇实现需要使用此插件,请先行在微信…

Mysql - 数据库时区是客户端属性还是服务端属性

一、说明 同事问我数据库的时区是客户端属性还是服务端属性,我觉得这个问题十分有意思,之前没怎么留意,自己来做下实验。 首先介绍几个术语。 GMT(Greenwich Mean Time),格林尼治平均时间。 UTC(Coordinated Universal Time),协调世界时。 CST(China Standard Time)…

sql求连续值问题

一. 找出表test1中tflag字段连续出现3次及以上为1的行思路:1. 对行进行编号,2. 对相邻三行进行求和算出值作为sumflag,3. 如果值为3,则该行以及接下来的2行都输出出来,通过自关联解决。 WITH tmp AS (SELECT tday, tflag, row_number() over(partition by null order by t…

Xming - xmanager的替代方案

一、概述 安装某些数据库的时候使用图像化还是比较方便的,但是由于服务器一般不提供图形化界面。之前一直都是使用Xmanager去导出图形,但是Xmanager是收费的,公司不让用,所以找了一款可以完美替代的产品Xming,本文将介绍xming如何安装和使用。 二、安装 1. 下载 https://s…

使用 Spacesniffer 找回 48G 系统存储空间的总结

Spacesniffer 是一个免费的文件扫描工具,操作完毕,我成功找回了 48G 的C盘空间前言Spacesniffer 是一个免费的文件扫描工具,通过使用树状图可视化布局,可以立即了解大文件夹的位置,帮助用户处理找到这些文件夹当前系统C盘空间清理后系统C盘空间下载 Spacesniffer 下载地址…

在WebGL中使用GLSL实现光线追踪

Update:git地址 https://github.com/mahiru23/raytrace 本文的根本目标是在WebGL中使用GLSL实现光线追踪,无图(懒得放了),仅供参考。 在一切开始之前,我们默认对GLSL的基本语法有所了解,不理解请自行查找。 一些需要重点关注的东西,请确认自己完全明白这一点再继续: …

苹果电脑进入 Macos 恢复启动

进入Macos 恢复启动 intel 芯片   从“macOS 恢复”启动按下并松开电源按钮以将 Mac 开机,然后立即按住键盘上 Command (⌘) 和 R 这两个按键。持续按住这两个按键,直到看到 Apple 标志或旋转的地球。系统可能会提示你选择 Wi-Fi 网络或连接网线。要选择 Wi-Fi 网络,请使用…