实验一-密码引擎-3-加密API研究

加密API研究

任务详情

密码引擎API的主要标准和规范包括:
1 微软的Crypto API
2 RAS公司的PKCS#11标准
3 中国商用密码标准:GMT 0016-2012 智能密码钥匙密码应用接口规范,GMT 0018-2012密码设备应用接口规范等

研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客链接和代码链接。
内容:
0 查找各种标准的原始文档,研究学习(至少包含Crypto API,PKCS#11,GMT 0016-2012,GMT 0018-2012)(5分)
1 总结这些API在编程中的使用方式(5分)
2 列出这些API包含的函数,进行分类,并总结它们的异同(10分)
3 以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接(10分)

一、微软Crypto AP

简介

​ CryptoAPI是一组函数,为了完成数学计算,必须具有密码服务提供者模块(CSP)。Microsoft通过捆绑RSA Base Provider在操作系统级提供一个CSP,使用RSA公司的公钥加密算法,更多的CSP可以根据需要增加到应用中。事实上,CSP有可能与特殊硬件设备(如智能卡)一起来进行数据加密。CryptoAPI接口允许简单的函数调用来加密数据,交换公钥,散列一个消息来建立摘要以及生成数字签名。它还提供高级的管理操作,如从一组可能的CSP中使用一个CSP。此外,CryptoAPI还为许多高级安全性服务提供了基础,包括用于电子商务的SET,用于加密客户机/服务器消息的PCT,用于在各个平台之间来回传递机密数据和密钥的PFX,代码签名等等。CryptoAPI的体系结构。

​ 因为过于复杂的加密算法实现起来非常困难,所以在过去,许多应用程序只能使用非常简单的加密技术,这样做的结果就是加密的数据很容易就可以被人破译。而使用Microsoft提供的加密应用程序接口(即Cryptography API),或称CryptoAPI,就可以方便地在应用程序中加入强大的加密功能分析,而不必考虑基本的算法。

(一)研究学习

CryptoAPI是应用程序编程接口,使应用程序开发人员能够将身份验证、编码和加密添加到基于Windows的应用程序。

  1. CryptoAPI 系统体系结构由五个主要功能领域组成:基本加密函数、证书编码/解码函数、证书Microsoft Store函数、简化的消息函数、低级别消息函数。

(1)基本加密函数

  • 用于连接到云解决方案提供商的上下文函数。 这些函数使应用程序能够按名称选择特定的云解决方案提供商,或选择可以提供所需功能类的特定云解决方案提供商。
  • 用于生成和存储加密密钥的密钥生成函数。 完全支持更改 链接模式、 初始化向量和其他加密功能。
  • 用于交换或传输密钥的密钥交换函数。 有

(2)证书编码/解码函数

  • 用于加密或解密数据的函数。 还支持 哈希数据。

(3)证书Microsoft Store函数

  • 用于管理数字证书集合的函数。

(4)简化的消息函数

  • 用于加密和解密消息和数据的函数。
  • 用于对消息和数据进行签名的函数。
  • 用于验证已接收消息和相关数据的签名的真实性的函数。

(5)低级别消息函数

  • 用于执行简化消息函数执行的所有任务的函数。 低级别消息函数比简化的消息函数更灵活,但需要更多的函数调用。
    image

每个功能区域在其函数名称中都有一个关键字,指示其功能区域。

功能区域 函数名称约定
基本加密函数 Crypt
编码/解码函数 Crypt
证书存储函数 存储
简化的消息函数 消息
低级别消息函数 Msg

应用程序在所有这些领域都使用函数。这些函数组合在一起,组成 CryptoAPI。 基本加密函数将 CSP 用于必要的加密算法以及加密密钥的生成和安全存储。
  使用了两种不同类型的加密密钥:会话密钥(用于单个加密/解密)和公钥/私钥对,这些密钥在更永久的基础上使用。

(二)使用方式

使用CryptoAPI编写一个文件保护程序,具有如下功能:
(1)给定明文文件,生成加密文件,同时产生文件的数字签名文件;
(2)给定密文文件,解密出明文文件,并验证签名的正确性。
  在不安全的网络上进行安全的数据传输涉及三个方面的要求:信息隐藏,身份鉴别和完整性检验。CryptoAPI除了提供上述三个功能外还提供标准的ASN.1编码、解码,信息解密,数字证书和证书存储区的管理,证书信任列表、吊销列表和证书有效性检查等功能。

1.信息隐藏

信息隐藏的意义是保障信息内容只能被特定的人获取。信息隐藏通常是使用某种形式的密码学方式。数据加密算法能保障信息的安区隐藏和传输。数据加密算法是将明文数据经过一定的变换使其看上去是一组毫无意义的数据。在没有加密密钥的情况下,对于好的加密算法想从密文获取明文信息是不可能的。被加密的数据可以是任意的ASCII编码文本文件,数据库文件,和任意需要进行安全传输的数据。这里,“信息”是指任意的一段数据,“明文”是指任意一段没有被加密的数据,“密文”是指任意一段加密的数据。被加密的数据可以在不安全的通道上进行传输而不伤害其安全性。之后,密文可以被还原成明文。
  数据加密和解密的概念是:对数据加密的时候需要一个加密密钥,相当于门上的一把钥匙。解密的时候,需要使用一个解密密钥来解开数据。加密密钥、解密密钥可以相同也可以不相同。
  加密密钥必须小心保存,给其它用户的时候也必须通过安全的通道传递。对解密密钥的访问权限必须小心控制,因为拥有解密密钥意味着可以解开所有相应加密密钥加密的信息。

2.身份鉴别

安全通讯的前提是通讯的双方知道对方的身份。身份鉴别的任务就是鉴别一个用户或者实体的真实身份。标识用户身份的文档通常被称为信任状或者凭证。
  身份鉴别有时候也用来判定接受的数据就是被发送的数据。如果A向B发送了一段数据,B需要鉴别这段数据就是A发出去的,而不是其它冒充A发出去的。为了满足这类验证的需求,CryptoAPI提供数字签名和校验函数,用来对信息进行鉴别。
  因为在计算机网网络上传输的数据与用户之间并没有物理连接,因此对数据进行鉴别的凭证也必须能够在网络上进行传输。这种凭证必须由受信任的凭证发行机构发行。
  数字证书就是平常说的证书就是这种凭证,是计算机在网络上进行身份验证的有效凭证。
  数字证书是由一个被称为证书机构的信任组织或实体颁发的凭证。它包含与证书对应的用户公钥以及其它一些记录证书主题和用户信息的数据。证书机构只有在验证了证书主题和证书对应的用户公钥的有效性之后才会签发证书。
  证书申请者和证书机构之间交换签发证书信息可以使用物理介质,比如软盘,进行传输。通常,这种信息都是在计算机网络上进行完成的。证书机构使用被信任的服务程序处理用户的请求和证书的签发工作。

3.完整性检验

任何通过不安全介质传输的信息都可以被意外或蓄意的修改。在现实世界中,盖章、签名就是用来提供和证明信息完整性的工具。
  信息的接收者不但需要确定信息是由谁发送的,还要确定自己收到的信息是发送者发送的信息,而没有任何的变化。要建立数据的完整性检测机制,不仅要发送信息本身,还要发送用来校验数据的信息,这一信息通常被称作哈希值。数据和验证信息都可以与数字签名一起发送来证明其完整性。

(三)API函数

服务提供者函数

API 功能分析
CryptAcquireContext 获得指定CSP 的密钥容器的句柄
CryptContextAddRef 对HCRYPTPROV 句柄增加一个应用计数
CryptEnumProviders 枚举当前计算机中的CSP
CryptEnumProviderTypes 枚举CSP 的类型
CryptGetDefaultProvider 对于指定CSP 类型的却省CSP
CryptGetProvParam 得到一个CSP 的属性
CryptInstallDefaultContext 安装先前得到的
HCRYPTPROV 上下文作为当前却省的上下文
CryptReleaseContext 释放由CryptAcquireContext 得到的句柄
CryptSetProvider和CryptSetProviderEx 为指定CSP 类型指定一个却省的CSP
CryptSetProvParam 指定一个CSP 的属性
CryptUninstallDefaultContext 删除先前由CryptInstallDefaultContext 安装的却省上下文

密钥的产生和交换函数

API 功能分析
CryptAcquireCertificatePrivateKey 对于指定证书上下文得到一个HCRYPTPROV 句柄和dwKeySpec
CryptDeriveKey 从一个密码中派生一个密钥
CryptDestoryKey 销毁密钥
CryptDuplicateKey 制作一个密钥和密钥状态的精确复制
CryptExportKey 把CSP 的密钥做成BLOB 传送到应用程序的内存空间中
CryptGenKey 创建一个随机密钥
CryptGenRandom 产生一个随机数
CryptGetKeyParam 得到密钥的参数
CryptGetUserKey 得到一个密钥交换或签名密钥的句柄
CryptImportKey 把一个密钥BLOB 传送到CSP中
CryptSetKeyParam 指定一个密钥的参数

编码/解码函数

API 功能分析
CryptDecodeObject 对lpszStructType 结构进行解码
CryptDecodeObjectEx 对lpszStructType 结构进行解码,此函数支持内存分配选项
CryptEncodeObject 对lpszStructType 结构进行编码
CyptEncodeObjectEx 对lpszStructType 结构进行编码,此函数支持内存分配选项

数据加密/解密函数

API 功能分析
CryptDecrypt 使用指定加密密钥来解密一段密文
CryptEncrypt 使用指定加密密钥来加密一段明文
CryptProtectData 执行对DATA_BLOB 结构的加密
CryptUnprotectData 执行对DATA_BLOB 结构的完整性验证和解密

哈希和数字签名函数

API 功能分析
CryptCreateHash 创建一个空哈希对象
CryptDestoryHash 销毁一个哈希对象
CryptDuplicateHash 复制一个哈希对象
CryptGetHashParam 得到一个哈希对象参数
CryptHashData 对一块数据进行哈希,把它加到指定的哈希对象中
CryptHashSessionKey 对一个会话密钥进行哈希,把它加到指定的哈希对象中
CryptSetHashParam 设置一个哈希对象的参数
CryptSignHash 对一个哈希对象进行签名
CryptVerifySignature 校验一个数字签名

证书库函数

API 功能分析
CertAddStoreToCollection 在证书库中增加一个证书
CertCloseStore 关闭一个证书库句柄
CertControlStore 如果证书缓冲区和证书本身内容不相符时,允许给应用程序发一个通知
CertDuplicateStore 通过增加引用计数来复制证书库句柄
CertEnumPhysicalStore 对于指定系统库枚举物理库
CertEnumSystemStore 枚举所有可用的系统库
CertEnumSystemStoreLocation 枚举可用系统库的所有位置
CertGetStoreProperty 得到一个库的属性
CertOpenStore 使用指定库类型来打开证书库
CertOpenSystemStore 打开一个系统证书库
CertRegisterPhysicalStore 在一个注册系统库里增加一个物理库
CertRegisterSystemStore 注册一个系统库
CertRemoveStoreFromCollection 从一个库集合里删除证书库
CertSaveStore 保存证书库
CertSetStoreProperty 设置证书属性
CertUnregisterPhysicalStore 从系统库中删除一个物理库
CertUnregisterSystemStore 反注册一个指定系统库

证书函数

API 功能分析
CertAddCertificateContextToStore 在证书库里增加一个证书上下文
CertAddCertificateLinkToStore 在证书库里增加一个对不同库里的证书上下文的链接
CertAddEncodedCertificateToStore 把编码证书转换成证书上下文并且把它加到证书库里
CertCreateCertificateContext 从编码证书中创建一个证书上下文。但这个上下文并不放到证书库里
CertCreateSelfSignCertificate 创建一个自签名证书
CertDeleteCertificateFromStore 从证书库里删除一个证书
CertDuplicateCertificate 通过增加引用计数来复制证书上下文
CertEnumCertificateInStore 在证书库里枚举证书上下文
CertFindCertificateInStore 在证书库里寻找证书上下文
CertFreeCertificateContext 释放一个证书上下文
CertGetIssuerCertificateFromStore 在证书库里得到指定主题证书的发行者
CertGetSubjectCertificateFromStore 获得主题证书的上下文
CertGetValidUsages 返回所有证书的用法
CertSerializeCertificateStoreElement 串行化编码证书的证书上下文
CertVerifySubjectCertificateContext 使用发行者来验证主题证书
CryptUIDlgViewContext 显示证书、CRL 或CTL
CryptUIDlgSelectCertificateFromStore 从指定库中显示对话框,可以从中选择证书

证书撤销列表函数

API 功能分析
CertAddCRLContextToStore 在证书库里增加一个CRL 上下文
CertAddCRLLinkToStore 在不同的库里增加一个CRL 上下文链接
CertAddEncodedCRLToStore 把编码CRL 转化成CRL 上下文然后把它加入到证书库中
CertCreateCRLContext 从编码CRL 中创建CRL 句柄,但不把它加到库中
CertDeleteCRLFromStore 从证书库里删除一个CRL
CertDuplicateCRLContext 通过增加引用计数来复制CRL 上下文
CertEnumCRLsInStore 枚举库里的CRL 句柄
CertFindCertificateInCRL 从指定证书里寻找CRL 列表
CertFindCRLInStore 在库里寻找CRL 上下文
CertFreeCRLContext 释放CRL 上下文
CertGetCRLFromStore 从库里得到CRL 上下文句柄
CertSerializeCRLStoreElement 串行化CRL 上下文的编码CRL 和它的属性

二、PKCS#11

(一)研究学习

PKCS#11是公钥加密标准Public-Key Cryptography Standards中的一份子,由RSA实验室发布。
  PKCS#11标准定义了与密码令牌的独立于平台的API,API本身命名为Cryptoki,这个API已经发展成为一个通用的加密令牌的抽象层。
  PKCS#11主要是应用于智能卡和HSM。
  PKCS#11为使用加密Token的应用程序提供统一的编程接口,独立于设备,屏蔽加密设备的复杂性,应用程序可以方便地更换设备。
  PKCS密码中间件位于上层应用和底层安全设备之间,应用基于 PKCS#11 标准接口开发各类应用程序。主要包括2个库

  • 主API库:提供给应用的PKCS11接口。
  • tokenDLL库:由主 API 库调用,完成从上向下到指定设备的套接。
  • 安全密码设备:安全服务资源和实施的载体,完成具体安全功能支撑。

PKCS #11模型中重要的概念之一是slot,也称为槽。一个slot为一个密码设备对象。某个打开的slot会话称之为session。Session之间存在不同的验证权限,而同一个slot的不同的session之间存在操作的互相影响性,同时在某些状况下,权限会发生同步。另外一个重要的概念是对象,PKCS #11中支持几种重要的对象,如公钥、私钥、对称密钥,数据对象等。
  PKCS#11创建和支持下列对象:
  PKCS#11的对象可根据其生命期长短的不同分成两大类:一类是持久存储的类对象,这类对象被保存在USB Key的安全存储区域当中,直到应用程序主动删除这些对象;另一类是会话对象,这类对象只存在于运行时建立的特定会话(Session对象)当中,一旦会话结束,这类对象也跟着被删除。
  PKCS#11的对象除了生命期长短有分别之外,在访问权限上也有限制。所有的对象都可根据访问权限的不同分成两大类:一类是公开对象,这类对象是任何用户都可以访问的;另一类是私有对象,这一类对象只有身份被验证的用户才有权访问。决定对象的访问限制类型的模板属性是CKA_PRIVATE。

(二)使用方式

1.架构

image

2.会话状态

image

3.对象

image

(三)API函数

通用接口

接口 功能分析
C_Initialize 初始化Cryptoki
C_Finalize 清楚相关资源
C_GetFunctionList 获取库函数列表

加密函数

接口 功能分析
C_EncryptInit 初始化一个加密操作
C_Encrypt 加密单部分数据
C_EncryptUpdate 继续多部分加密操作
C_EncryptFinal 结束一次多部分加密操作

解密函数

接口 功能分析
C_DecryptInit 启动一项解密操作
C_Decrypt 解密单部分中的加密数据
C_DecryptUpdate 继续一项多部分的解密操作
C_DecryptFinal 结束多部分解密操作

消息摘要

接口 功能分析
C_DigestInit 预置消息摘要操作
C_Digest 摘要单部分中的数据
C_DigestUpdate 继续多部分消息摘要操作
C_DigestKey 摘要保密密钥值
C_DigestFinal 结束多部分消息摘要操作

签名和MAC

接口 功能分析
C_SignInit 预置签名操作,其中签名是数据的附录
C_Sign 给单部分中的数据签名
C_SignUpdate 继续多部分签名操作,处理另一个数据部分
C_SignFinal 结束多部分签名操作

验证签名和MAC

接口 功能分析
C_VerifyInit 预置校验操作,其中签名是数据的附录
C_Verify 校验单部分操作中的签名
C_VerifyUpdate 继续一个多部分的校验操作
C_VerifyFinal 结束一次多部分校验操作,检查签名

密钥管理

接口 功能分析
C_GenerateKey 产生一个保密密钥,创建一个新的密钥对象
C_GenerateKeyPair 生成一个公私钥对,创建新的密钥对象
C_WrapKey 打包一个私有或保密密钥
C_UnwrapKey 解包一个打包密钥
C_DeriveKey 从基础密钥中衍生出一个密钥,创建一个新的密钥对象

随机数生成

接口 功能分析
C_SeedRandom 将附加的种子材料混入令牌的随机数生成器
C_GenerateRandom 产生随机或伪随机的数据

GM/T 0006设备

设备管理类函数

接口 功能分析
SDF_OpenDevice 打开设备
SDF_CloseDevice 关闭设备
SDF_OpenSession 创建会话
SDF_CloseSession 关闭会话
SDF_GetDeviceInfo 获取设备信息
SDF_GenerateRandom 产生随机数
SDF_GetPrivateKeyAccessRight 获取私钥使用权限
SDF_ReleasePrivateKeyAccessRight 释放私钥使用权限

密钥管理类函数

接口 功能分析
SDF_ExportSignPublicKey_RSA 导出RSA签名公钥
SDF_ExportEncPobulicKey_RSA 导出RSA加密公钥
SDF_GenerateKeyPair_RSA 产生RSA非对称密钥对并输出
SDF_GenerateKeyWithIPK_RSA 生成会话密钥并用内部RSA公钥加密输出
SDF_GenerateKeyWithEPK_RSA 生成会话密钥并用外部RSA公钥加密输出
SDF_ImportKeyWithISK_RSA 生成会话密钥并用内部RSA公钥解密
SDF_ExchangeDigitEnvelopeBaseOnRSA 基于RSA算法的数字信封转换
SDF_ExportSignPublicKey_ECC 导出ECC签名公钥
SDF_ExportEncPublicKey_ECC 导出ECC加密公钥
SDF_GenerateKeyPair_ECC 产生ECC非对称密钥对并输出
SDF_GenerateKeyWithIPK_ECC 生成会话密钥并用内部ECC公钥加密输出
SDF_GenerateKeyWithEPK_ECC 生成会话密钥并用外部ECC公钥加密输出
SDF_ImportKeyWithISK_ECC 导入会话密钥并用内部ECC私钥解密
SDF_GenerateAgreementDataWithECC 生成密钥协商参数并输出
SDF_GenerateKeyWithECC 计算会话密钥
SDF_GenerateAgreementDataAndKeyWithECC 产生协商数据并计算会话密钥
SDF_ExchangeDigitEnvelopeBaseOnECC 基于ECC算法的数字信封转换
SDF_GenerateKeyWithKEK 生成会话密钥并用密钥加密密密钥加密输出
SDF_ImportKeyWithKEK 导入会话密钥并用密钥加密密钥解密
SDF_DestroyKey 销毁会话密钥

非对称算法运算类函数

接口 功能分析
SDF_ExternalPublicKeyOperation_RSA 外部公钥RSA运算
SDF_InternalPublicKeyOperation_RSA 内部公钥RSA运算
SDF_InternalPrivateKeyOperation_RSA 内部私钥RSA运算
SDF_ExternalVerify_ECC 外部密钥ECC验证
SDF_InternalSign_ECC 内部密钥ECC签名
SDF_InternalVerify_ECC 内部密钥ECC验证
SDF_ExternalEncrypt_ECC 外部密钥ECC加密

对称算法运算类函数

接口 功能分析
SDF_Encrypt 对称加密
SDF_Decrypt 对称解密
SDF_CalculateMAC 计算MAC

杂凑运算类函数

接口 功能分析
SDF_HashInit 杂凑运算初始化
SDF_HashUpdate 多包杂凑运算
SDF_HashFinal 杂凑运算结束

用户文件操作类函数

接口 功能分析
SDF_CreateFile 创建文件
SDF_ReadFile 读取文件
SDF_WriteFile 写文件
SDF_DeleteFile 删除文件

三、GMT 0016-2012 智能密码钥匙密码应用接口规范

(一)研究学习

GM/T 0016-2012 文件查看

接口规范

GMT 0016-2012是国家规定的智能密码钥匙密码应用接口规范,规定了基于PKI密码体制的智能密码钥匙密码应用接口,描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求。适用于智能密码钥匙产品的研制、使用和检测。

规范性引用文件

下列文件对于本标准的应用是必不可少的。凡是注日期的引用文件。仅所注日期的版本适用于本文件;凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件;GM/T 0006密码应用标识规范;GM/T AAAA SM2密码算法使用规范
image

(二)使用方式

层次关系

智能密码钥匙密码应用接口位于智能密码钥匙应用程序与设备之间,如下图所示。
image

应用结构

image

(三)API函数

设备管理系列函数

image

访问控制系列函数

image

应用管理系列函数

image

文件管理系列函数

image

容器管理系列函数

image

密码服务系列函数

image
image

四、GMT 0018-2012密码设备应用接口规范

(一)研究学习

接口标准

GMT 0018-2012标准规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准。适用于服务类密码设备的研制、使用,以及基于该类密码设备的应用开发,也可用于指导该类密码设备的检测。

规范性引用文件

下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件;凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件;GM/T 0006密码应用标识规范;GM/T AAAA SM2密码算法使用规范。
  其中还包括了对部分术语的规定:
image

(二)使用方式

在公钥密码基础设施应用技术体系框架中,密码设备服务层由密码机,密码卡,智能密码终端等设备组成,通过本标准规定的密码设备应用接口向通用密码服务层提供基础密码服务。如下图所示。
image
  基础密码服务包括密钥生成、单一的密码运算、文件管理等的服务。
  本标准采用C语言描述接口函数。如无特别说明,函数中参数的长度单位均为字节数。

(三)API函数

设备管理类函数

API 功能
SDF_OpenDevice 打开设备
SDF_CloseDevice 关闭设备
SDF_OpenSession 创建会话
SDF_CloseSession 关闭会话
SDF_GetDeviceInfo 获取设备信息
SDF_GenerateRandom 产生随机数
SDF_GetPrivateKeyAccessRight 获取私钥使用权限
SDF_ReleasePrivateKeyAccessRight 释放私钥使用权限

密码管理函数

API 功能
SDF_ExportSignPublicKey_RSA 导出 RSA 签名公钥
SDF_ExportEncPublicKey_RSA 导出 RSA 加密公钥
SDF_GenerateKeyPair_RSA 产生 RSA 非对称密钥对并输出
SDF_GenerateKeyWithIPK_RSA 生成会话密钥并用内部 RSA 公钥加密输出
SDF_GenerateKeyWithEPK_RSA 生成会话密钥并用外部 RSA 公钥加密输出
SDF_ImportKeyWithISK_RSA 导入会话密钥并用内部 RSA 私钥解密
SDF_ExchangeDigitEnvelopeBaseOnRSA 基于 RSA 算法的数字信封转换
SDF_ExportSignPublicKey_ECC 导出 ECC 签名公钥
SDF_ExportEncPublicKey_ECC 导出 ECC 加密公钥
SDF_GenerateKeyPair_ECC 产生 ECC 非对称密钥对并输出
SDF_GenerateKeyWithIPK_ECC 生成会话密钥并用内部 ECC 公钥加密输出
SDF_GenerateKeyWithEPK_ECC 生成会话密钥并用外部 ECC 公钥加密输出
SDF_ImportKeyWithISK_ECC 导入会话密钥并用内部 ECC 私钥解密
SDF_GenerateAgreementDataWithECC 生成密钥协商参数并输出
SDF_GenerateKeyWiuhECC 计算会话密钥
SDF_GenerateAgreementDataAndKeyWithECC 产生协商数据并计算会话密钥
SDF_ExchangeDigitEnvelopeBaseOnECC 基于 ECC 算法的数字信封转换
SDF_GenerateKeyWithKEK 生成会话密钥并用密钥加密密钥加密输出
SDF_ImportKeyWithKEK 导入会话密钥并用密钥加密密钥解密
SDF_DestroyKey 销毁会话密钥

五、以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接

(一)SKF接口

(二)Crypto API


(三)PKCS#11

DES:


DES3:

RC2:

RC4:

RSA:

AES:

(四)密钥生成和Exchange函数

代码已经上传码云
https://gitee.com/ning-jing2/curriculum_1/tree/master/

posted @ 2024-04-08 11:23  20211309宁心宇  阅读(11)  评论(0编辑  收藏  举报