社区
硬件/系统
帖子详情
怎么用CryptoAPI检测一个USB KEY的句柄还是否有效?
Tommy
2006-04-13 05:25:03
我们在应用中,用USB KEY进行SSL通信,但是希望在用户拔出USB KEY的时候可以检测到,从而停止工作。不知有什么方法可以做到这点?
...全文
552
5
打赏
收藏
怎么用CryptoAPI检测一个USB KEY的句柄还是否有效?
我们在应用中,用USB KEY进行SSL通信,但是希望在用户拔出USB KEY的时候可以检测到,从而停止工作。不知有什么方法可以做到这点?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Tommy
2006-05-12
打赏
举报
回复
DBT_DEVNODES_CHANGED和找到证书之间确实有延迟。我估计DBT_DEVNODES_CHANGED只是指硬件层就绪了,CryptAPI应该也是在收到这个信号后才去看有没有新的证书,所以在收到DBT_DEVNODES_CHANGED消息时证书还没有就绪。
ycxw
2006-04-24
打赏
举报
回复
我也没有找到好办法,但你可以这么做
检测到DBT_DEVNODES_CHANGED消息,你调用CryptAquireContext,看看能不能成功,能成功,就是插入,否则就是拔除了
至于延时问题,只有当设备完全准备好了,之后,才会产生DBT_DEVNODES_CHANGED消息,我觉得是这样的
Tommy
2006-04-17
打赏
举报
回复
谢谢MSDN3000(八门金锁)。
不过要这样做的话,就要找出所用的CryptoAPI的证书与物理设备的对应关系,这恐怕不太好找。
最好是直接用一个CryptoAPI调用来判断EKey还是否可用。换个说法吧,就是想看看一个CryptoAPI的句柄还是否有效。
Tommy
2006-04-17
打赏
举报
回复
而且这样做也有问题,我用明华的Key试了一下,插入后收到WM_DEVICECHANGE消息时在系统中还找不到对应的证书,可能有个延后的时间。
另外,我收不到DBT_DEVICEARRIVAL和DBT_DEVICEREMOVECOMPLETE两种消息,只有DBT_DEVNODES_CHANGED消息
MSDN3000
2006-04-15
打赏
举报
回复
转一篇文章,希望有所帮助:
USB设备插入与拔出的响应
2005.11.18
有时候,我们需要检测到USB设备的插入与拔出事件,比如,一个有加密锁的程序,当加密锁拔出时,程序应当给出相应提示,并可能采取退出程序的举措。要达到这个目的,我们可以通过响应WM_DEVICECHANGE消息来达到这个目的,而WPARAM则可以告诉我们USB设备是插入还是拔出的。如果WPARAM为DBT_DEVICEARRIVAL则是插入事件,如果为DBT_DEVICEREMOVECOMPLETE则为删除事件。这两个宏义于头文件Dbt.h中。以下以VC为例做成例子。
1. 在相关cpp文件中加入头文包含:
#include
2. 在相应类中添加函数:
LRESULT CtestUsbChangeDlg::OnDeviceChange(WPARAM wParam, LPARAM lParam)
{
switch(wParam)
{
case DBT_DEVICEARRIVAL: //插入
MessageBox("设备插入!");
break;
case DBT_DEVICEREMOVECOMPLETE: //删除
MessageBox("设备删除!");
break;
}
return LRESULT();
}
3. 添加消息映射:
BEGIN_MESSAGE_MAP(CTestUsbChangeDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_DEVICECHANGE, OnDeviceChange)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
至此,程序已经可以检测USB设备的插入与拨出操作了。事实上,WM_DEVICECHANGE不只支持USB设备的插入与拔出,其它支持热插拔的设备也应支持,不过,因条件所限,只能测试USB设备的情况。
KEY
CSP封装层设计
CryptoAPI
是
一个
应用程序编程接口,目的就是提供开发者在Windows 下使用PKI 的编程接口。
CryptoAPI
提供了很多函数,包括编码、解码、加密、解密、哈希、数字证书、证书管理和证书存储等功能。CrytoAPI最重要的功能之一就是加密,但它本身不具有加密功能,而是通过内部的
一个
独立模块(CSP)实现的。
PKCS11接口标准
pkcs11 接口标准(完全版)。RSA公司的pkcs11加密设备接口标准和微软的
CryptoAPI
是目前使用最广泛的两的安全接口标准,是从事信息安全的专业人员必须了解的内容。
Delphi下一代密码学:Windows
CryptoAPI
实战指南
本文还有配套的精品资源,点击获取 简介:Windows
CryptoAPI
是微软提供的安全服务组件,支持加密、解密、数字签名和哈希等操作。该压缩包包含了Delphi环境中使用
CryptoAPI
的库和示例代码,帮助开发者实现高级密码学功能。Delphi通过PInvoke技术调用Windows API,具体操作包括获取CSP
句柄
、生成密钥、数据加密和解密等。内容还可能包括源码库...
CAPI写密钥对到
USB
Key
CSP中
在前面了解了
CryptoAPI
和CSP的相关概念之后,我们具体分析了
CryptoAPI
的相关函数,实现了写证书、私钥的过程和更新证书的过程。写证书和私钥到CSP的方案:首先将CA返回给RA的证书和私钥进行封装,将它们封装成P12结构证书,然后将P12结构证书导入到
一个
临时的证书库中。在该临时库中找到证书的上下文,通过证书上下文获得
一个
临时的CSP
句柄
和证书对应的私钥的类型,然后根据这个CSP
句柄
和
CryptoApi
写入Pfx证书
#include "stdafx.h" #include "ZdActivex.h" #include "ZdActivexCtrl.h" #include "ZdActivexPropPage.h" #include "afxdialogex.h" #include <stdio.h> #include <windows.h> #include &am
硬件/系统
2,644
社区成员
17,232
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章