密码系统设计实验3-1

实验3.1

在Ubuntu或openEuler中(推荐openEuler)中编译运行附件中《GM/T 0016智能密码钥匙密码应用接口规范》相关代码

解压longmaiskf0016-stu.zip压缩包

image-20251124190242284

image-20251124190304391

解压步骤太多,这里只展示一部分

共有六个功能(encrypt、FingerMgrDemo、interruptTest、enumdevinfo、monitordev、signature)

image-20251124190338564

运行encrypt功能

image-20251124194829242
路径不对,需要重新查找后更改路径

image-20251124194912098

image-20251124194855927
image-20251124194936754
更改后编译成功
image-20251124194957342
插入插入龙迈 GM3000 型号智能卡后成功运行程序

image-20251124195159738

main.cpp文件里代码功能解释

  1. 包含头文件:
  • #include "../include/skfapi.h":包含智能卡框架的API定义。
  • #include <stdio.h>、#include <stdlib.h>、#include <string.h>:分别包含标准输入输出、标准库和字符串操作函数。
  1. 宏定义:
  • TRUEFALSE:定义布尔值。
  • ERROR_THROW(r):一个宏,用于检查函数返回值,如果不等于SAR_OK(成功),则跳转到END_OF_FUN标签,结束函数执行。
  1. 主函数main:
  • 定义了一系列的变量,包括用于存储设备名、应用名、容器名、用户PIN、加密数据等的缓冲区。
  • 初始化了一些变量,比如设备句柄、应用句柄、容器句柄、用户PIN等。
  1. 设备枚举和连接:
  • 使用SKF_EnumDev函数枚举智能卡设备,并获取设备名称。
  • 使用SKF_ConnectDev函数连接到智能卡设备。
  1. 应用枚举和打开:
  • 使用SKF_EnumApplication函数枚举智能卡上的应用,并获取应用名称。
  • 使用SKF_OpenApplication函数打开智能卡上的应用。
  1. PIN验证:
  • 使用SKF_VerifyPIN函数验证用户PIN。
  1. 容器枚举和打开:
  • 使用SKF_EnumContainer函数枚举智能卡上的容器,并获取容器名称。
  • 使用SKF_OpenContainer函数打开智能卡上的容器。
  1. 随机数生成和对称密钥设置:
  • 使用SKF_GenRandom函数生成随机数,用于对称密钥。
  • 使用SKF_SetSymmKey函数设置对称密钥。
  1. 加密初始化和执行加密:
  • 使用SKF_EncryptInit函数初始化加密操作。
  • 使用SKF_Encrypt函数对数据进行加密。
  1. 输出加密结果:
  • 如果加密成功,输出“encrypt data ok!”
  1. 资源清理:
  • END_OF_FUN标签处,关闭所有打开的句柄,包括密钥句柄、容器句柄、应用句柄和设备连接。
  1. 返回值:
  • 函数返回1,表示程序执行完成。

运行FingerMgrDemo功能

image-20251124195908593
编译成功
image-20251124200236984

成功运行

main.cpp文件里代码功能解释

  1. 包含头文件:
  • 包括标准输入输出、标准库、字符串操作、Unix标准函数、智能卡框架API以及动态链接库和线程库。
  1. 宏定义:
  • SGD_FINGER_STATUS:一个用于检查设备是否支持指纹功能的宏。
  1. 显示函数display:
  • 显示一个菜单,列出所有可用的指纹操作选项。
  1. 枚举和连接设备函数EnunDevFun
  • 枚举智能卡设备并连接到设备,获取设备句柄和应用句柄。
  1. PIN码登录函数VerifyPIN
  • 使用PIN码登录智能卡应用。
  1. 指纹录入函数EnrollFinger
  • 录入用户的指纹信息到智能卡。
  1. 指纹验证函数VerifyFinger
  • 验证用户的指纹是否与智能卡上存储的指纹信息匹配。
  1. 删除指纹函数Deletefinger
  • 从智能卡中删除用户的指纹信息。
  1. 指纹测试函数TestFinger
  • 用于指纹学习,提高指纹验证的准确性。
  1. 解锁指纹函数UnblockFinger
  • 解锁被锁定的指纹。
  1. 获取指纹信息函数GetFingerInfo
  • 获取智能卡上存储的指纹信息。
  1. 指纹验证(不带PIN码)函数VerifyPINForFinger
  • 仅使用指纹进行验证。
  1. 获取设备类型函数GetDevInfo
  • 获取智能卡设备的类型,判断是否为指纹设备。
  1. 获取指纹录入个数函数GetFingerCount
  • 获取智能卡上已录入的指纹数量。
  1. 主函数main
    -初始化设备和应用句柄,然后进入一个循环,显示菜单并根据用户的选择执行相应的指纹操作。

运行interruptTest功能

image-20251124200902731
编译成功
image-20251124200914760
运行成功

main.cpp文件里代码功能解释

  1. 包含头文件:
    - #include "../include/skfapi.h":包含智能卡框架API的头文件。
  • #include <stdio.h>、#include <stdlib.h>、#include <string.h>:分别包含标准输入输出、标准库和字符串操作函数。
  1. 主函数main:
  • 定义了一系列变量,包括用于存储设备名、随机数、设备句柄、密钥句柄等。
  1. 无限循环枚举设备:
  • 使用while (1)创建了一个无限循环,这个循环会不断尝试枚举设备。
  • memset(szDevName, 0, 256):清空设备名缓冲区。
  • ulNameLen = 256:设置设备名缓冲区的长度。
  • ulRslt = SKF_EnumDev(1, szDevName, &ulNameLen):调用SKF_EnumDev函数枚举智能卡设备,并将设备名存储在szDevName中。
  • printf("%d %s\n", i, szDevName):打印设备索引和设备名。
  1. 连接设备:
  • ulRslt = SKF_ConnectDev(pszdev, &hdev):如果枚举成功,尝试连接到智能卡设备,并获取设备句柄。
  1. 生成随机数:
  • ulRslt = SKF_GenRandom(hdev, pbRandom, 8):如果连接成功,生成8字节的随机数。
  1. 循环继续:
  • 如果在任何步骤中遇到错误(ulRslt != SAR_OK),则continue语句会跳过当前循环的剩余部分,重新开始循环。
  1. 资源清理:
  • END_OF_FUN:标签用于标记资源清理代码的开始。
  • 如果hkey不为NULL,则调用SKF_CloseHandle关闭密钥句柄。
  • 如果hdev不为NULL,则调用SKF_DisConnectDev断开设备连接。
  1. 返回结果:
    函数返回ulRslt,即最后一次操作的结果。

运行enumdevinfo功能

image-20251124201455336
编译成功
image-20251124201516347
运行成功

main.cpp文件里代码功能解释

  1. 包含头文件:
  • #include "../include/skfapi.h":包含智能卡框架API的头文件。
  • #include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>:分别包含标准输入输出、标准库、字符串操作和Unix标准函数。
  1. 宏定义:
  • TRUEFALSE:定义布尔值。
  • ERROR_THROW(r):一个宏,用于检查函数返回值,如果不等于SAR_OK(成功),则跳转到END_OF_FUN标签,结束函数执行。
  1. 主函数main:
  • 定义了一系列变量,包括用于存储设备名、设备句柄、设备信息等。
  1. 枚举设备:
  • 使用for循环最多尝试10次枚举智能卡设备。
  • ulRslt = SKF_EnumDev(TRUE, szDevName, &ulDevNameLen):调用SKF_EnumDev函数枚举智能卡设备,并将设备名存储在szDevName中。
  • 如果枚举失败或设备名长度为0,则打印错误信息并退出。
  1. 连接设备:
  • while循环中,只要pdevname(设备名)的长度大于0,就尝试连接设备。
  • ulRslt = SKF_ConnectDev(pdevname, &hdev):调用SKF_ConnectDev函数连接到智能卡设备,并获取设备句柄。
  • 如果连接失败,则打印错误信息并退出。
  1. 获取设备信息:
  • ulRslt = SKF_GetDevInfo(hdev, &info):调用SKF_GetDevInfo函数获取设备的详细信息,并存储在info结构体中。
  • 如果获取信息失败,则打印错误信息并退出。
  1. 打印设备信息:
  • 打印设备的制造商、对称加密能力、非对称加密能力、哈希能力、设备认证算法ID、发行者、标签、序列号和总空间等信息。
  1. 资源清理:
  • END_OF_FUN:标签用于标记资源清理代码的开始。
  • 由于代码中没有显示断开设备连接的语句(//SKF_DisConnectDev(hdev);被注释掉了),所以这里没有资源清理的操作。
  1. 返回结果:
    函数返回1,表示程序执行完成。

运行monitordev功能

image-20251124201929737
编译成功
image-20251124201941402
运行成功

main.cpp文件里代码功能解释

  1. 包含头文件:
  • #include "../include/skfapi.h":包含智能卡框架API的头文件。
  • #include <stdio.h>#include <stdlib.h>#include <string.h>#include <pthread.h>#include <unistd.h>:分别包含标准输入输出、标准库、字符串操作、多线程库和Unix标准函数。
  1. 宏定义:
  • TRUEFALSE:定义布尔值。
  • ERROR_THROW(r):一个宏,用于检查函数返回值,如果不等于SAR_OK(成功),则跳转到END_OF_FUN标签,结束函数执行。
  1. 取消线程函数CancelThread
  • 这是一个线程函数,它在一个无限循环中等待智能卡设备的事件。
  • 使用SKF_WaitForDevEvent函数等待设备事件,如设备插入或移除,并获取设备名称和事件类型。
  • 如果事件类型为1(通常表示设备插入),则尝试连接到设备并获取设备信息。
  • 如果连接成功,获取设备的制造商、发行者、标签、序列号和总空间等信息,并打印出来。
  • 如果事件类型为2(通常表示设备移除),则打印设备移除的消息和设备名称。
  1. 主函数main
  • 创建一个线程hThread,该线程运行CancelThread函数。
  • 使用sleep(200000)让主线程休眠200000秒(大约23.9天),这样创建的线程有足够的时间来处理设备事件。
  1. 资源清理:
  • END_OF_FUN:标签用于标记资源清理代码的开始。
  • 由于代码中没有显示断开设备连接的语句(//SKF_DisConnectDev(hdev);被注释掉了),所以这里没有资源清理的操作。
  1. 返回结果:
  • 函数返回1,表示程序执行完成。

运行signature功能

image-20251124202212804
编译成功
9997fd9cd001ee9324c83b8a38554159
运行成功

main.cpp文件里代码功能解释

  1. 包含头文件:
  • #include "../include/skfapi.h":包含智能卡框架API的头文件。
  • #include <stdio.h>#include <stdlib.h>#include <string.h>:分别包含标准输入输出、标准库和字符串操作函数。
  1. 宏定义:
  • TRUEFALSE:定义布尔值。
  • ERROR_THROW(r):一个宏,用于检查函数返回值,如果不等于SAR_OK(成功),则跳转到END_OF_FUN标签,结束函数执行。
  • #ifdef WIN32 ... #endif:条件编译指令,仅在Windows平台下添加库依赖。
  1. 主函数main
  • 定义了一系列变量,包括用于存储设备名、应用名、容器名、用户PIN、哈希数据、ECC公钥、ECC签名等。
  1. 枚举和连接设备:
    - ulRslt = SKF_EnumDev(TRUE, szDevName, &ulDevNameLen):枚举智能卡设备,并获取设备名。
  • ulRslt = SKF_ConnectDev(pdevname, &hdev):连接到智能卡设备,并获取设备句柄。
  1. 枚举和打开应用:
  • ulRslt = SKF_EnumApplication(hdev, szAppName, &ulAppNameLen):枚举智能卡上的应用,并获取应用名。
  • ulRslt = SKF_OpenApplication(happ, pappname):打开智能卡上的应用,并获取应用句柄。
  1. PIN验证:
  • ulRslt = SKF_VerifyPIN(happ, USER_TYPE, pUserPin, &ulRetryCount):验证用户PIN。
  1. 枚举和打开容器:
  • ulRslt = SKF_EnumContainer(happ, szContName, &ulContNameLen):枚举智能卡上的容器,并获取容器名。
  • ulRslt = SKF_OpenContainer(happ, pcontname, &hcont):打开智能卡上的容器,并获取容器句柄。
  1. 导出公钥:
  • ulRslt = SKF_ExportPublicKey(hcont, TRUE, (BYTE *)&ecc_pub, &ulEccpubLen):从容器中导出ECC公钥。
  1. 生成摘要:
  • ulRslt = SKF_DigestInit(hdev, SGD_SM3, &ecc_pub, (BYTE *)pubid, 16, &hkey):初始化摘要算法(SM3)。
  • ulRslt = SKF_Digest(hkey, (BYTE *)psrcdata, strlen(psrcdata), pHashData, &ulHashDataLen):对数据进行摘要运算。
  1. 签名:
  • ulRslt = SKF_ECCSignData(hcont, pHashData, ulHashDataLen, &ecc_sign):使用ECC私钥对摘要数据进行签名。
  1. 验证签名:
  • ulRslt = SKF_ECCVerify(hdev, &ecc_pub, pHashData, ulHashDataLen, &ecc_sign):使用ECC公钥验证签名。
  1. 资源清理:
  • END_OF_FUN:标签用于标记资源清理代码的开始。
  • 关闭所有打开的句柄,包括密钥句柄、容器句柄、应用句柄和设备连接。
  1. 返回结果:
  • 函数返回1,表示程序执行完成。

在Ubuntu或openEuler中(推荐openEuler)中编译运行附件中《GMT 0018密码设备应用接口规范》相关代码

解压压缩包:
image-20251124203512387
image-20251124203542326

插入蓝色u盘后运行程序./test

open device successed!
open session successed!
CosVer: 6200
SDF_GetCosVersion successed
pucChipID[16]:
43464759 3221270e 050207e7 48531020
SDF_GetChipID successed
KeyList:
SGD_KEY_TYPE_ROOTKEY-80: 01
SGD_KEY_TYPE_KPK-81: 00
SGD_KEY_TYPE_FILEKEY-82: 00
SGD_KEY_TYPE_SESSIONKEY-83: 00000000000000000000000000000000
SGD_KEY_TYPE_SM2-84: 00000000000000000000000000000000
SGD_KEY_TYPE_RSA-85: 0000000000000000000000000000000000000000000000000000000000000000
SGD_KEY_TYPE_ECC-86: 00000000000000000000000000000000
SDF_GetKeyList successed
pOutRand[256]:
03dd922d e4ee259a 54482eb5 2d77be9f 67b60892 6c46ce3a 62075334 12271633 
c201c97d 14714e53 dfb8a364 623621ae 83df5c35 89586d89 c5e3a762 6648f0ab 
abe1a019 bbbd2b87 91b88811 daf70a54 75f598df 4e361cad 1e3e3c07 3f19088d 
768ed04f c491d770 7ff00485 0a2e6307 5b5903a0 6ea6879e 095977be ea44aabd 
c841026a 9474406a c03d9c89 02609562 5f05addb b42d801a d0196aed 62656e8e 
56d475fa 00ef57a3 25e99eb5 d1518e77 f447dc7e 0175a6a4 b1b940fe 82bcffa5 
b16d4bb1 b7587489 a64b28cf 7272a900 7d2f0329 9b68f3fc c4d71966 7e56ec89 
ee9fbb93 53c2ea70 1738b55a ed6594a0 b156e43c 3aa49068 dd50e0dd 7bde6629
SDF_GenerateRandom successed!
SDF_ExternalAuthen successed
ExternalAuthen rootkey successed!
SDF_ImportManagerialKey rootkey successed!
SDF_ImportManagerialKey SGD_KEY_TYPE_KPK successed!
SDF_ImportManagerialKey SGD_KEY_TYPE_FILEKEY successed!
SDF_InstallDeviceSN successed!
KeyList:
SGD_KEY_TYPE_ROOTKEY-80: 01
SGD_KEY_TYPE_KPK-81: 01
SGD_KEY_TYPE_FILEKEY-82: 01
SGD_KEY_TYPE_SESSIONKEY-83: 00000000000000000000000000000000
SGD_KEY_TYPE_SM2-84: 00000000000000000000000000000000
SGD_KEY_TYPE_RSA-85: 0000000000000000000000000000000000000000000000000000000000000000
SGD_KEY_TYPE_ECC-86: 00000000000000000000000000000000
SDF_GetKeyList successed
DevSN:hs_0000000000001
SDF_GetDeviceSN successed
SDF_ExternalAuthen successed
ExternalAuthen SGD_KEY_TYPE_FILEKEY successed!
SDF_ConfigDataAreaPermission successed
BinaryReadWriteTest success!
SDF_ImportSessionKey success!
KeyList:
SGD_KEY_TYPE_ROOTKEY-80: 01
SGD_KEY_TYPE_KPK-81: 01
SGD_KEY_TYPE_FILEKEY-82: 01
SGD_KEY_TYPE_SESSIONKEY-83: 01010101010101010101010101010101
SGD_KEY_TYPE_SM2-84: 00000000000000000000000000000000
SGD_KEY_TYPE_RSA-85: 0000000000000000000000000000000000000000000000000000000000000000
SGD_KEY_TYPE_ECC-86: 00000000000000000000000000000000
SDF_GetKeyList successed
SDF_DestroySessionKey success!
KeyList:
SGD_KEY_TYPE_ROOTKEY-80: 01
SGD_KEY_TYPE_KPK-81: 01
SGD_KEY_TYPE_FILEKEY-82: 01
SGD_KEY_TYPE_SESSIONKEY-83: 01010101010101010000000000000000
SGD_KEY_TYPE_SM2-84: 00000000000000000000000000000000
SGD_KEY_TYPE_RSA-85: 0000000000000000000000000000000000000000000000000000000000000000
SGD_KEY_TYPE_ECC-86: 00000000000000000000000000000000
SDF_GetKeyList successed 
SGD_SM4_ECB Encrypt datasize: 4000000 Bytes used time: 6953649 us
SGD_SM4_ECB Encrypt average speed: 4601900 bps
SGD_SM4_ECB Decrypt datasize: 4000000 Bytes used time: 6634695 us
SGD_SM4_ECB Decrypt average speed: 4823130 bps
SGD_SM4_CBC Encrypt datasize: 4000000 Bytes used time: 5747105 us
SGD_SM4_CBC Encrypt average speed: 5568020 bps
SGD_SM4_CBC Decrypt datasize: 4000000 Bytes used time: 4866297 us
SGD_SM4_CBC Decrypt average speed: 6575841 bps
SGD_SM1_ECB Encrypt datasize: 4000000 Bytes used time: 5065727 us
SGD_SM1_ECB Encrypt average speed: 6316961 bps
SGD_SM1_ECB Decrypt datasize: 4000000 Bytes used time: 4805321 us
SGD_SM1_ECB Decrypt average speed: 6659284 bps
SGD_SM1_CBC Encrypt datasize: 4000000 Bytes used time: 5005967 us
SGD_SM1_CBC Encrypt average speed: 6392371 bps
SGD_SM1_CBC Decrypt datasize: 4000000 Bytes used time: 5010479 us
SGD_SM1_CBC Decrypt average speed: 6386614 bps
SGD_AES_ECB Encrypt datasize: 4000000 Bytes used time: 4868696 us
SGD_AES_ECB Encrypt average speed: 6572601 bps
SGD_AES_ECB Decrypt datasize: 4000000 Bytes used time: 4936081 us
SGD_AES_ECB Decrypt average speed: 6482875 bps
SGD_AES_CBC Encrypt datasize: 4000000 Bytes used time: 4892254 us
SGD_AES_CBC Encrypt average speed: 6540952 bps
SGD_AES_CBC Decrypt datasize: 4000000 Bytes used time: 4833996 us
SGD_AES_CBC Decrypt average speed: 6619782 bps
SGD_IPSEC_SM1 Encrypt datasize: 4000000 Bytes used time: 4831400 us
SGD_IPSEC_SM1 Encrypt average speed: 6623338 bps
SGD_IPSEC_SM1 Decrypt datasize: 4000000 Bytes used time: 4854561 us
SGD_IPSEC_SM1 Decrypt average speed: 6591739 bps
SGD_IPSEC_SM4 Encrypt datasize: 4000000 Bytes used time: 4859542 us
SGD_IPSEC_SM4 Encrypt average speed: 6584982 bps
SGD_IPSEC_SM4 Decrypt datasize: 4000000 Bytes used time: 4841394 us
SGD_IPSEC_SM4 Decrypt average speed: 6609666 bps
SDF_ExternalAuthen successed
ExternalAuthen SGD_KEY_TYPE_KPK successed!
Generate_Export_Import_SM2_KeyPair successed!
Generate_Export_Import_ECC_KeyPair successed!
Generate_Export_Import_RSA1024_KeyPair successed!
Generate_Export_Import_RSA2048_KeyPair successed!
KeyList:
SGD_KEY_TYPE_ROOTKEY-80: 01
SGD_KEY_TYPE_KPK-81: 01
SGD_KEY_TYPE_FILEKEY-82: 01
SGD_KEY_TYPE_SESSIONKEY-83: 01010101010101010000000000000000
SGD_KEY_TYPE_SM2-84: 03030302020303030301010300000000
SGD_KEY_TYPE_RSA-85: 0505050101050505050404050000000005050501010505050504040500000000
SGD_KEY_TYPE_ECC-86: 03030302020303030301010300000000
SDF_GetKeyList successed
SM2_Internal_EncDec successed!
ECC_Internal_EncDec successed!
RSA1024_Internal_EncDec successed!
RSA2048_Internal_EncDec successed!
SM2_Internal_SignVerify successed!
SM2-Sign Times: 100 times;	Spent time: 485961 us
SM2-Sign average speed: 205 times/s
SM2-Verify Times: 100 times;	Spent time: 513789 us
SM2-Verify average speed: 194 times/s
SM2_Internal_SignVerify_test successed!
ECC_Internal_SignVerify successed!
RSA1024_Internal_SignVerify successed!
RSA2048_Internal_SignVerify successed!
RSA1024-Sign Times: 100 times;	Spent time: 490887 us
RSA1024-Sign average speed: 203 times/s
RSA1024-Verify Times: 100 times;	Spent time: 498196 us
RSA1024-Verify average speed: 200 times/s
RSA1024_Internal_SignVerify_test successed!
RSA2048-Sign Times: 100 times;	Spent time: 1637713 us
RSA2048-Sign average speed: 61 times/s
RSA2048-Verify Times: 100 times;	Spent time: 504848 us
RSA2048-Verify average speed: 198 times/s
RSA2048_Internal_SignVerify_Test successed!
SM2_External_EncDec successed!
ECC_External_EncDec successed!
RSA1024_External_EncDec successed!
RSA2048_External_EncDec successed!
SM2_External_SignVerify successed!
ECC_External_SignVerify successed!
RSA1024_External_SignVerify successed!
RSA2048_External_SignVerify successed!
The amount of data: 4000000 bytes time: 4826394 us
SGD_SM3Hash average speed: 6630208 bps
SGD_SM3Hash successed!
SGD_SHA_160_Hash successed!
SGD_SHA_224_Hash successed!
SGD_SHA_256_Hash successed!
SGD_SHA_384_Hash successed!
SGD_SHA_512_Hash successed!
SGD_HMac successed!
test successed.

插入蓝色U盘,给test运行权限后成运行test成功如上

test.c文件里代码功能解释

  1. 包含头文件:
  • #include<stdio.h>#include <string.h>#include"sdf.h"#include<pthread.h>#include<sys/time.h>#include<sys/types.h>#include <stdlib.h>:分别包含标准输入输出、字符串操作、智能设备框架API、多线程库、时间操作库、系统类型库和标准库。
  1. 宏定义和全局变量:
  • 定义了一些宏,如ROOTKEYDEVSNMAX等,以及一些全局的密钥变量和加密相关的数据结构。
  1. 辅助函数myprintf
  • 用于打印十六进制数据。
  1. 密钥备份和导入函数:
  • EccBackUpKeyPair:备份ECC密钥对。
  • ImportKeyPair:导入ECC密钥对。
  1. 加密解密函数:
  • SM1_ENC_DEC_ECBSM1_ENC_DEC_CBCSM1_ENC_DEC_OFB:使用SM1算法进行ECBCBCOFB模式的加密解密。
  • SM4_ENC_DEC_ECBSM4_ENC_DEC_CBCSM4_ENC_DEC_OFB:使用SM4算法进行ECBCBCOFB模式的加密解密。
  1. IPSEC加密解密函数:
  • SM1_ENC_DEC_IPSECSM4_ENC_DEC_IPSEC:使用SM1和SM4算法进行IPSEC模式的加密解密。
  1. 哈希函数:
  • SGD_SM3Hash:使用SM3算法进行哈希计算。
  1. ECC加密解密和签名验证函数:
  • SM2EncDec:使用SM2算法进行加密解密。
  • SM2SignVer:使用SM2算法进行签名验证。
  1. 主函数main:
  • 打开智能卡设备和会话。
  • 生成随机数并打印。
  • 导入根密钥和设备序列号。
  • 获取设备信息并打印。
  • 执行密钥备份、导入、导出操作。
  • 执行加密解密测试。
  • 执行哈希、ECC加密解密和签名验证测试。
  • 关闭会话和设备。

posted on 2025-11-23 12:49  20231406王浩霖  阅读(9)  评论(0)    收藏  举报

导航