首页 > 其他分享 >密码引擎-3-加密API研究

密码引擎-3-加密API研究

时间:2024-04-10 15:23:36浏览次数:21  
标签:API CK rv 加密 PROV RSA 引擎 hSession

任务内容

研究以上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分)
以下是我的学习链接:https://learn.microsoft.com/zh-cn/windows/win32/seccrypto/cryptoapi-system-architecture#base-cryptographic-functions
https://www.jianshu.com/p/b5a80fe0e901
https://www.doc88.com/p-6911351376514.html
https://v1.cecdn.yun300.cn/150001_2107145025/GMT0018-2012密码设备应用接口规范(1).pdf
https://blog.csdn.net/liuhuiyi/article/details/7778123
https://www.w3.org/TR/WebCryptoAPI/

任务详情

1.API在编程中的使用方式

  1. 了解API文档:在使用任何API之前,首先需要阅读其文档。文档通常包含了如何配置和使用API的详细指南,包括如何认证、API支持的请求类型、传递参数的方式、响应的数据格式等关键信息。

  2. 配置认证信息:大多数API,特别是商业API,要求用户进行身份认证以使用其服务。这通常涉及到生成API密钥、设置OAuth令牌等。根据API的要求,将这些认证信息妥善配置到你的请求中。

  3. 构造请求:根据API文档构造HTTP请求。这包括选择正确的HTTP方法(GET、POST、PUT等)、设置请求头、构造请求体(对于POST和PUT请求)以及设置任何必要的查询参数。

  4. 处理响应:发送请求后,你将收到API的响应。根据API文档,解析响应体中的数据。这可能涉及到处理JSON或XML格式的数据,提取你需要的信息。

  5. 错误处理和调试:在使用API的过程中,可能会遇到各种错误,如网络问题、认证失败、请求参数错误等。根据API返回的错误代码和信息,进行相应的错误处理和调试。有时,你可能需要记录请求和响应的详细信息,以便进一步分析问题。

2、基本加密函数

CSP是真正实行加密的独立模块,他既可以由软件实现也可以由硬件实现。但是他必须符合CryptoAPI接口的规范。
每个CSP都有一个名字和一个类型。每个CSP的名字是唯一的,这样便于CryptoAPI找到对应的CSP。目前已经有9种CSP类型,并且还在增长。下表列出出它们支持的密钥交换算法、签名算法、对称加密算法和Hash算法。

CSP类型 交换算法 签名算法 对称加密算法 Hash算法
PROV_RSA_FULL RSA RSA RC2、RC4 MD5、SHA
PROV_RSA_SIG none RSA none MD5、SHA
PROV_RSA_SCHANNEL RSA RSA RC4、DES、Triple DES MD5、SHA
PROV_DSS DSS none DSS MD5、SHA
PROV_DSS_DH DH DSS CYLINK_MEK MD5、SHA
PROV_DH_SCHANNEL DH DSS DES、Triple DES MD5、SHA
PROV_FORTEZZA KEA DSS Skipjack SHA
PROV_MS_EXCHANGE RSA RSA CAST MD5
PROV_SSL RSA RSA Varies Varies

设备的应用结构


基本数据类型

通用的接口
















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





(三)PKCS#11

1.龙脉密码钥匙驱动实例工具等\mToken-GM3000\pkcs11\windows\samples\PKCStest\PKCStest.sln

(1)DES


(2)DES3



(3)Rc2


(4)RC4


(5)RSA


(6)AES

龙脉密码钥匙驱动实例工具等\mToken-GM3000\pkcs11\windows\samples\GetUSBInfos\getusbinfos.sln

相关代码:

Ⅰ.Crypto API#

Copy

HCRYPTPROV hCryptProv;
HCRYPTHASH hCryptHash;
HCRYPTKEY hCryptKey;


CPAcquireContext(
    hCryptProv, NULL,
    MS_DEF_PROV,
    PROV_RSA_FULL,
    CRYPT_VERIFYCONTEXT
)//为应用程序创建一个上下文
    
CPCreateHash(
    hCryptProv,
    CALG_MD5,
    0,
    0,
    &hCryptHash
) //为应用程序创建一个上下文
    
static char szHash[]=”PISAHASHDATA”; //原始字符串
DWORD dwLen=strlen(szHash);
CPHashData(hCryptHash, (BYTE*)szHash, dwLen, 0);//散列输入的数据
CPDeriveKey(hCryptProv, CALG_RC2, hCryptHash, 0, &hCryptKey);//从一个数据散列中生成一个会话密钥,它保证生成的密钥互不相同

static char szEntry[]= “PISA2002”;
DWORD dwLenIn = strlen(szEntry);
DWORD dwLenOut=dwLenIn;
CPEncrypt(hCryptKey, 0, TRUE, 0, (BYTE*)szEntry, &dwLenOut, dwLenIn);//用来加密明文
CPDecrypt(hCryptKey, 0, TRUE, 0,(BYTE*)szEntry,&dwLenOut);//用来解密先前被加密的数据
CPDestroyKey(hCryptKey);//释放一个密钥句柄,释放后,句柄将无效,密钥将无法再被访问
CPDestroyHash(hCryptHash);//删除一个散列对象句柄
CPReleaseContext(hCryptProv, NULL);//释放CPAcquireContext.创建的上下文

Ⅱ.PKCS#11

CK_SESSION_HANDLE hSession;
CK_MECHANISM digestMechanism;
CK_ULONG ulStateLen;
CK_BYTE data1[] = {0x01, 0x03, 0x05, 0x07};
CK_BYTE data2[] = {0x02, 0x04, 0x08};
CK_BYTE data3[] = {0x10, 0x0F, 0x0E, 0x0D, 0x0C};
CK_BYTE pDigest[20];
CK_ULONG ulDigestLen;
CK_RV rv;

/* Initialize hash operation */
rv = C_DigestInit(hSession, &digestMechanism);//初始化消息杂凑计算操作,指定计算消息杂凑的算法
assert(rv == CKR_OK);

/* Start hashing */
rv = C_DigestUpdate(hSession, data1, sizeof(data1));//对多个分组的消息进行杂凑计算
assert(rv == CKR_OK);//返回成功或者失败

/* Find out how big the state might be */
rv = C_GetOperationState(hSession, NULL_PTR, &ulStateLen);//获取设备是否存在的状态
assert(rv == CKR_OK);//返回成功或者失败

/* Allocate some memory and then get the state */
pState = (CK_BYTE_PTR) malloc(ulStateLen);
rv = C_GetOperationState(hSession, pState, &ulStateLen);//获取设备是否存在的状态

/* Continue hashing */
rv = C_DigestUpdate(hSession, data2, sizeof(data2));//对多个分组的消息进行杂凑计算
assert(rv == CKR_OK);//返回成功或者失败

/* Restore state.  No key handles needed */
rv = C_SetOperationState(hSession, pState, ulStateLen, 0, 0);
assert(rv == CKR_OK);//返回成功或者失败

/* Continue hashing from where we saved state */
rv = C_DigestUpdate(hSession, data3, sizeof(data3));//对多个分组的消息进行杂凑计算
assert(rv == CKR_OK);//返回成功或者失败

/* Conclude hashing operation */
ulDigestLen = sizeof(pDigest);
rv = C_DigestFinal(hSession, pDigest, &ulDigestLen);
if (rv == CKR_OK) {
  /* pDigest[] now contains the hash of 0x01030507100F0E0D0C */
}//返回成功或者失败

标签:API,CK,rv,加密,PROV,RSA,引擎,hSession
From: https://www.cnblogs.com/liyishi1110/p/18126092

相关文章

  • 加密API研究
    实验一-密码引擎-3-加密API研究查找各种标准的原始文档,研究学习(至少包含CryptoAPI,PKCS#11,GMT0016-2012,GMT0018-2012)(5分)微软的CryptoAPIhttps://learn.microsoft.com/zh-cn/windows/win32/seccrypto/cryptoapi-system-architectureRAS公司的PKCS#11标准https://docs......
  • 实验一-密码引擎-3-加密API研究
    ##一、任务概览密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代......
  • 实验一-密码引擎-3-加密API研究
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档目录一、任务详情二、查找各种标准的原始文档,研究学习1.CryptoAPICryptoAPI学习链接:CryptoAPI由五个主要功能区域组成:2.PKCS#113.GMT0016-20124.GMT0018-2012三、总结这些API在编程中的使用方式四、列出这些AP......
  • 实验一-密码引擎3-加密API的研究
    目录一、查找各种标准的原始文档,研究学习Ⅰ.CryptoAPIⅡ.PKCS#11Ⅲ.GMT0016-2012Ⅳ.GMT0018-2012二、总结这些API在编程中的使用方式Ⅰ.CryptoAPIⅡ.PKCS#11Ⅲ.GMT0016-2012Ⅳ.GMT0018-2012三、列出这些API包含的函数,进行分类,并总结它们的异同3.1Cryp......
  • 实验一-密码引擎-3-加密API研究
    0查找各种标准的原始文档,研究学习(至少包含CryptoAPI,PKCS#11,GMT0016-2012,GMT0018-2012)CryptoAPIhttps://learn.microsoft.com/zh-cn/windows/win32/seccrypto/cryptoapi-system-architecture#base-cryptographic-functions微软的CryptoAPI是Win32平台下为应用程序开发者......
  • 实验一-密码引擎-3-加密API研究
    实验一-密码引擎-3-加密API研究一、查找各种标准的原始文档,研究学习(至少包含CryptoAPI,PKCS#11,GMT0016-2012,GMT0018-2012)1.CryptoAPI微软的CryptoAPI是PKI推荐使用的加密API。功能是为应用程序开发者提供在Win32环境下使用加密、验证等安全服务时的标准加密接口。Cry......
  • 实验一-密码引擎-加密API的研究
    一、任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交......
  • 加密API研究
    0查找各种标准的原始文档,研究学习(至少包含CryptoAPI,PKCS#11,GMT0016-2012,GMT0018-2012)(5分)(1)CryptoAPICrypto接口提供了当前上下文中可用的基本的加密功能。它允许访问一个密码学安全的随机数生成器和密码学原语(cryptographicprimitive)。WebCryptoAPI可以通过crypto属......
  • 实验一-密码引擎-3-加密API研究
    目录1CryptoAPI1.1五个主要功能区域1.2函数1.2.1基本加密函数1.2.2证书和证书库函数1.2.3证书验证函数1.2.4创建密钥容器2PKCS#112.1函数2.2操作3GM/T0018-20123.1简介3.2范围3.3结构模型3.4函数3.5安全要求3.5.1密钥管理要求3.5.2密码服务......
  • 实验一-密码引擎-3-加密API研究
    任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客......