PC/SC Sharp 使用指南
项目介绍
PC/SC Sharp 是一个.NET库,封装了访问个人计算机/智能卡资源管理器的功能,利用系统的原生PC/SC API。该库支持部分ISO7816标准,并设计为兼容Windows和Unix系统(通过.NET Core或Mono与PCSC Lite)。它不是一个全功能的智能卡访问库,不包含特定于供应商的协议实现;用户需自行实现如APDU指令等交互逻辑。该库要求使用符合PC/SC标准的读卡器及驱动。
支持操作系统:
- Windows (winscard.dll): Windows 11 64位, Windows 10 (64位/32位)
- Linux (PC/SC Lite): Ubuntu (64位/32位), MacOS X, Raspberry Pi/Linux ARM
项目快速启动
要快速开始使用PC/SC Sharp,首先确保开发环境已安装.NET SDK 8.0或更高版本。以下是建立基础连接并列出所有连接的智能卡读者的示例:
using System;
using PCSCTest.PCSC;
public class Program
{
static void Main(string[] args)
{
ContextFactory.Instance.Establish(SCardScope.System).Using(context =>
{
Console.WriteLine("当前连接的阅读器:");
foreach (var readerName in context.GetReaders())
{
Console.WriteLine($"\t{readerName}");
}
});
}
}
应用案例和最佳实践
建立资源管理器上下文
每个操作需要有效的上下文。遵循一卡一读或一监控一上下文的原则,上下文使用完毕后应及时释放以节省资源。
发送ISO7816 APDU命令
以下代码演示如何向智能卡发送获取挑战的命令:
using (var ctx = ContextFactory.Instance.Establish(SCardScope.System))
{
using (var isoReader = new IsoReader(ctx, "示例读卡器名", SCardShareMode.Shared, SCardProtocol.Any, false))
{
var apdu = new CommandApdu(IsoCase.Case2Short, isoReader.ActiveProtocol)
{
CLA = 0x00,
Instruction = InstructionCode.GetChallenge,
P1 = 0x00,
P2 = 0x00,
Le = 0x08
};
var response = isoReader.Transmit(apdu);
Console.WriteLine($"SW1 SW2 = {response.SW1:X2} {response.SW2:X2}");
}
}
最佳实践建议
- 单次使用原则:每个智能卡操作应限制在一个上下文中。
- 资源管理:确保适当处置
using
块内的对象以释放资源。
典型生态项目
虽然本指南中没有提供具体的“典型生态项目”,PC/SC Sharp被广泛用于各种场景,包括但不限于金融安全、门禁控制、身份验证和物联网设备中的智能卡交互。开发者可以参考Examples目录下的源码,了解如何在实际应用中集成和扩展PC/SC Sharp的功能。
本指南旨在帮助开发者迅速上手PC/SC Sharp库,更多高级用法和深入技术细节,推荐查阅项目GitHub页面的详细文档和源代码注释。