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

  1. 原始文档链接:

  2. API在编程中的使用方式:

    • 微软CryptoAPI:在Windows平台上,CryptoAPI是由几个系统DLL提供支持,如Advapi32.dll。开发者通常会在C或C++代码中包含相关的头文件,如<wincrypt.h>,然后利用提供的函数来进行密钥管理、加密/解密、签名/验证和散列等操作。CryptoAPI还支持使用证书和加密服务提供者(CSP)。

    • PKCS#11:这是一个用于与加密令牌(如硬件安全模块或智能卡)交互的API。它定义了一个C语言API,允许应用程序与这些令牌进行通信。在使用PKCS#11时,需要加载厂商提供的共享库(如动态链接库或.so文件),然后使用该标准定义的函数来执行操作。这通常涉及到会话管理、登录、密钥管理和密码操作等。

    • 中国商用密码标几:GMT标准规定了与密码设备的交互方式,特别是在满足中国密码法规的情况下。例如,它们规定了如何使用国密算法进行加密和解密、数字签名、消息摘要等。编程时通常需要使用到标准定义的函数和数据结构。

  3. API包含的函数、分类和异同:

由于函数的具体列表和描述通常非常详细,以下是一个简化的概述:

  • 微软CryptoAPI:

    • 密钥管理:CryptGenKey, CryptExportKey, CryptImportKey
    • 加解密:CryptEncrypt, CryptDecrypt
    • 签名和验证:CryptSignHash, CryptVerifySignature
    • 散列和摘要:CryptCreateHash, CryptHashData, CryptGetHashParam
  • PKCS#11:

    • 会话管理:C_OpenSession, C_CloseSession, C_Login, C_Logout
    • 密钥管理:C_GenerateKey, C_GenerateKeyPair, C_ImportKey
    • 加解密:C_EncryptInit, C_Encrypt, C_DecryptInit, C_Decrypt
    • 签名和验证:C_SignInit, C_Sign, C_VerifyInit, C_Verify
    • 散列和摘要:C_DigestInit, C_Digest, C_DigestUpdate, C_DigestFinal
  • 中国商用密码标准(以SKF为例,因为GMT0016和0018很多涉及SKF标准):

    • 设备管理:SKF_ConnectDev, SKF_DisConnectDev
    • 密钥管理:SKF_GenRandom, SKF_GenECCKeyPair, SKF_ImportECCKeyPair
    • 加解密:SKF_EncryptInit, SKF_Encrypt, SKF_DecryptInit, SKF_Decrypt
    • 签名和验证:SKF_ECCSignData, SKF_ECCVerify
    • 散列和摘要:SKF_DigestInit, SKF_Digest, SKF_DigestFinal

异同点:

  • API风格:CryptoAPI通常与Windows操作系统紧密集成,而PKCS#11提供了一个适用于多种平台和设备的通用接口。GMT标准通常与中国的安全政策和算法紧密相关。
  • 平台依赖:CryptoAPI是Windows特有的,而PKCS#11和GMT标准更为通用,但GMT标准的实际应用主要集中在中国。
  • 功能提供:虽然所有这些API都提供了加密服务的核心功能,但它们在实现细节和提供的额外功能上有所不同,比如CryptoAPI提供了与Windows证书存储集成的能力,而PKCS#11和GMT标准更专注于与硬件令牌的交互。

代码运行截图:

posted @ 2024-04-09 10:25  周意凯  阅读(26)  评论(0编辑  收藏  举报