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

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

时间:2024-04-14 16:13:07浏览次数:19  
标签:API 加密 密码 引擎 密钥 GMT data 2012

任务详情

密码引擎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)

1 总结这些API在编程中的使用方式

2 列出这些API包含的函数,进行分类,并总结它们的异同

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

研究学习

0. 查找各种标准的原始文档,研究学习

  1. 微软的Crypto API

  2. PKCS#11

  3. 中国商用密码标准

1. 总结这些API在编程中的使用方式

  • 微软的Crypto API:

    • 提供了一组函数用于在 Windows 平台上执行各种加密和安全操作,包括数据加密、数字签名、证书管理等。
    • 开发者可以使用这些函数来实现文件加密、数字签名、证书管理等功能,而不需要了解底层加密算法的细节。
  • PKCS#11:

    • 定义了一组平台无关的 API,用于与密码令牌(如硬件安全模块和智能卡)进行交互。
    • 提供了对加密对象(如RSA密钥、X.509证书、对称密钥等)的创建、使用、修改和删除的功能。
  • 中国商用密码标准:

    • GMT 0016-2012:规定了基于PKI密码体制的智能密码钥匙密码应用接口,包括函数、数据类型、参数定义等。
    • GMT 0018-2012:规定了服务类密码设备的应用接口标准,适用于密码设备的研制、使用和应用开发。

2. 列出这些API包含的函数,并进行分类

微软的Crypto API:

  • 加密函数:CryptEncrypt, CryptDecrypt
  • 数字签名函数:CryptSignMessage, CryptVerifyMessage
  • 证书管理函数:CertCreateCertificateContext, CertFreeCertificateContext

PKCS#11:

  • 初始化函数:C_Initialize, C_Finalize
  • 对象管理函数:C_CreateObject, C_DestroyObject
  • 加密函数:C_Encrypt, C_Decrypt

中国商用密码标准:

  • GMT 0016-2012:
    • 密钥管理函数:InitKeyHandle, GenerateKey
    • 加密函数:EncryptData, DecryptData
  • GMT 0018-2012:
    • 设备初始化函数:DeviceInit, DeviceFinal
    • 对象管理函数:CreateObject, DestroyObject

(1)Crypto API

主要函数

  • 主函数: void main(void)
  • 加密文件: BOOL EncryptFile(PCHAR szSource, PCHAR szDestination, PCHAR szPassword)
  • 解密文件: BOOL DecryptFile(PCHAR szSource, PCHAR szDestination, PCHAR szPassword)
  • 签名文件: BOOL SignFile(PCHAR szSource, PCHAR szDestination)
  • 验证签名: BOOL VerifyFile(PCHAR szSource, PCHAR szDestination)
  • 错误处理: void HandleError(char *s)

加密文件

a) 打开源文件: hSource = fopen(szSource,"rb")
b) 取得密钥容器(CSP)句柄: CryptAcquireContext(&hCryptProv,NULL,NULL,PROV_RSA_FULL,0)
c) 创建会话密钥:
- CryptCreateHash(hCryptProv,CALG_MD5, 0, 0, &hHash)
- CryptHashData(hHash, (BYTE *)szPassword, strlen(szPassword), 0)
- CryptDeriveKey(hCryptProv, ENCRYPT_ALGORITHM, hHash, KEYLENGTH, &hKey)
- CryptDestroyHash(hHash)
d) 加密数据文件:
- CryptEncrypt(hKey, 0, feof(hSource), 0, pbBuffer, &dwCount, dwBufferLen)
e) 清理工作:
- free(pbBuffer)
- CryptDestroyKey(hKey)
- CryptDestroyHash(hHash)
- CryptReleaseContext(hCryptProv, 0)

解密文件

a) 打开加密文件(同上)
b) 取得密钥容器(CSP)句柄(同上)
c) 创建会话密钥(同上)
d) 解密数据文件:
- CryptDecrypt(hKey, 0, feof(hSource), 0, pbBuffer, &dwCount)
e) 清理工作: (同上)

签名文件

a) 打开源文件(同上)
b) 取得密钥容器(CSP)句柄(同上)
c) 取得签名用的密钥句柄(非对称RSA密钥)
- CryptGetUserKey(hCryptProv, AT_SIGNATURE, &hKey)
d) 导出签名用密钥对的公钥
- CryptExportKey(hKey, NULL, PUBLICKEYBLOB, 0, pbKeyBlob, &dwBlobLen)
e) 计算数据文件的Hash值
- CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash)
- CryptHashData(hHash, pbBuffer, dwCount, 0)
f) 对数据文件的Hash值进行签名
- CryptSignHash(hHash, AT_SIGNATURE, NULL, 0, pbSignature, &dwSigLen)
g) 清理工作: (同上)

验证签名

a) 打开文件(同上)
b) 取得密钥容器(CSP)句柄(同上)
c) 导入公钥
- CryptImportKey(hCryptProv, pbKeyBlob, dwBlobLen, 0, 0, &hPubKey)
d) 计算数据文件的Hash值(同上)
e) 验证数字签名
- CryptVerifySignature(hHash, pbSignature, dwSigLen, hPubKey, NULL, 0)
f) 清理工作: (同上)

(2)PKCS#11

根据机制标记,可以分为几类:

  • CKF_ENCRYPT:加密类
  • CKF_DECRYPT:解密类
  • CKF_DIGEST:摘要类
  • CKF_SIGN:签名类
  • CKF_SIGN_RECOVER:可恢复签名类
  • CKF_VERIFY:验证类
  • CKF_VERIFY_RECOVER:可恢复验证类
  • CKF_GENERATE:密钥产生
  • CKF_GENERATE_KEY_PAIR:密钥对产生
  • CKF_WRAP:密钥封装
  • CKF_UNWRAP:密钥解封
  • CKF_DERIVE:密钥派生

(3)GMT 0016-2012

(4)GMT 0018-2012

下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件,凡是不注日期的引用文件,其最新版本(包括所有的修单)适用于本文件,

  • GM/T0006 密码应用标识规范
  • GM/T0009 SM2密码算法使用规范


3. 以龙脉GM3000Key为例,写出调用不同接口的代码

# 使用微软的Crypto API
import win32crypt

def encrypt_data(data, key):
    encrypted_data = win32crypt.CryptEncrypt(data, key)
    return encrypted_data

def decrypt_data(data, key):
    decrypted_data = win32crypt.CryptDecrypt(data, key)
    return decrypted_data

# 使用PKCS#11
from pkcs11 import CryptoToken

def encrypt_data(data, token):
    encrypted_data = token.encrypt(data)
    return encrypted_data

def decrypt_data(data, token):
    decrypted_data = token.decrypt(data)
    return decrypted_data

# 使用GMT 0016-2012
from gmt0016 import SmartKey

def encrypt_data(data, key_handle):
    encrypted_data = SmartKey.encrypt_data(data, key_handle)
    return encrypted_data

def decrypt_data(data, key_handle):
    decrypted_data = SmartKey.decrypt_data(data, key_handle)
    return decrypted_data

# 使用GMT 0018-2012
from gmt0018 import ServiceKeyDevice

def encrypt_data(data, device_handle):
    encrypted_data = ServiceKeyDevice.encrypt(data, device_handle)
    return encrypted_data

def decrypt_data(data, device_handle):
    decrypted_data = ServiceKeyDevice.decrypt(data, device_handle)
    return decrypted_data




这段代码展示了如何使用不同的密码引擎API(Crypto API、PKCS#11、GMT 0016-2012、GMT 0018-2012)对数据进行加密和解密操作。

标签:API,加密,密码,引擎,密钥,GMT,data,2012
From: https://www.cnblogs.com/zsy1748774883/p/18134255

相关文章

  • 密码引擎3
    一、微软的CryptoAPI(一)研究学习CryptoAPI系统体系结构WebCryptoAPIWebCryptographyAPICSP开发基础--CryptoAPI函数简介CryptoAPI是应用程序编程接口,使应用程序开发人员能够将身份验证、编码和加密添加到基于Windows的应用程序。CryptoAPI系统体系结构由五个主要......
  • 加密API研究
    加密API研究一、标准内容1.CryptoAPI加密API是一种提供加密操作接口的技术,为应用程序提供在软件和硬件之间的通信方式。加密API通常提供对数据的加密、解密、签名、验证和密钥管理等功能。这些API的存在使开发者可以方便地集成加密功能,提高应用程序的安全性。此外,CryptoAPI......
  • 实验一-密码引擎-3-加密API研究
    实验一-密码引擎-3-加密API研究任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key......
  • TextIn.com API使用心得
    我们参加了本次大学生创新创业服务外包大赛,在项目中大量使用到了合合信息所提供的api进行相关功能实现,所以在这里写一篇博客分享一下我们在项目的实际推进中关于TextIn.comAPI使用心得我们的产品是一款面向公司管理的REP微信小程序,由于需要覆盖大部分的企业办公需求,我们使用到了......
  • 10-接口测试工具(PostMan和ApiPost)
    在前后端分离的开发模式下,通常需要使用接口测试工具进行开发,这里介绍两种比较好用的1)PostManPostman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件,常用于接口测试官方下载网址:DownloadPostman|GetStartedforFree安装教程:PostMan——安装使用教程(图文详解)_po......
  • FastAPI-MySQL-Cookie代码实现
    连接数据库fromsqlalchemyimportcreate_enginefromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.ormimportsessionmakerfromurllib.parseimportquote_pluspassword='123456'encoded_password=quote_plus(password)SQLALCHEM......
  • 实验一-密码引擎-3-加密API研究
    任务要求密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客......
  • 密码引擎-加密API研究
    任务详细密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交......
  • 实验一-密码引擎-3-加密API研究
    一、微软的CryptoAPI参考网站:https://learn.microsoft.com/zh-cn/windows/win32/seccrypto/cryptoapi-system-architecturehttps://developer.mozilla.org/zh-CN/docs/Web/API/Web_Crypto_APIhttps://www.w3.org/TR/2017/REC-WebCryptoAPI-20170126/https://blog.csdn.net/l......
  • 02_Web Api使用Jwt
    JWT(JSONWebToken)是一种用于在网络应用之间传递信息的开放标准(RFC7519)。它使用JSON对象在安全可靠的方式下传递信息,通常用于身份验证和信息交换。在WebAPI中,JWT通常用于对用户进行身份验证和授权。当用户登录成功后,服务器会生成一个Token并返回给客户端,客户端在接下来的请求......