实验一-密码引擎-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的应用程序。
- CryptoAPI 系统体系结构由五个主要功能领域组成:基本加密函数、证书编码/解码函数、证书Microsoft Store函数、简化的消息函数、低级别消息函数。
(1)基本加密函数
- 用于连接到云解决方案提供商的上下文函数。 这些函数使应用程序能够按名称选择特定的云解决方案提供商,或选择可以提供所需功能类的特定云解决方案提供商。
- 用于生成和存储加密密钥的密钥生成函数。 完全支持更改 链接模式、 初始化向量和其他加密功能。
- 用于交换或传输密钥的密钥交换函数。 有
(2)证书编码/解码函数
- 用于加密或解密数据的函数。 还支持 哈希数据。
(3)证书Microsoft Store函数
- 用于管理数字证书集合的函数。
(4)简化的消息函数
- 用于加密和解密消息和数据的函数。
- 用于对消息和数据进行签名的函数。
- 用于验证已接收消息和相关数据的签名的真实性的函数。
(5)低级别消息函数
每个功能区域在其函数名称中都有一个关键字,指示其功能区域。
功能区域 | 函数名称约定 |
---|---|
基本加密函数 | 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.架构
2.会话状态
3.对象
(三)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 智能密码钥匙密码应用接口规范
(一)研究学习
接口规范
GMT 0016-2012是国家规定的智能密码钥匙密码应用接口规范,规定了基于PKI密码体制的智能密码钥匙密码应用接口,描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求。适用于智能密码钥匙产品的研制、使用和检测。
规范性引用文件
下列文件对于本标准的应用是必不可少的。凡是注日期的引用文件。仅所注日期的版本适用于本文件;凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件;GM/T 0006密码应用标识规范;GM/T AAAA SM2密码算法使用规范
(二)使用方式
层次关系
智能密码钥匙密码应用接口位于智能密码钥匙应用程序与设备之间,如下图所示。
应用结构
(三)API函数
设备管理系列函数
访问控制系列函数
应用管理系列函数
文件管理系列函数
容器管理系列函数
密码服务系列函数
四、GMT 0018-2012密码设备应用接口规范
(一)研究学习
接口标准
GMT 0018-2012标准规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准。适用于服务类密码设备的研制、使用,以及基于该类密码设备的应用开发,也可用于指导该类密码设备的检测。
规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件;凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件;GM/T 0006密码应用标识规范;GM/T AAAA SM2密码算法使用规范。
其中还包括了对部分术语的规定:
(二)使用方式
在公钥密码基础设施应用技术体系框架中,密码设备服务层由密码机,密码卡,智能密码终端等设备组成,通过本标准规定的密码设备应用接口向通用密码服务层提供基础密码服务。如下图所示。
基础密码服务包括密钥生成、单一的密码运算、文件管理等的服务。
本标准采用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/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本