作者:orouit 来自马来西亚
前言:
.NET framework在2002年推出,目前最高版本是3.5。到目前为止,微软在。NET中还没有包含操作智能卡的类,如果你想建立一个智能卡应用项目,你需要设计你自己的类。幸运的是在.net中比java强的多的是,我们可以大量重复使用现有的代码。在Windows里,假如你需要应用智能卡项目,在恰好在你的程序中使用PC/SC API。这个API使用C语言写的函数通过COM与COM的互操作,和P/Invoke的本地代码的互操来实现。
背景:
本文演示了如何使用关于互操作性的特点,在NET中利用他们呢来写一个简单的框架,以在你的程序中操作智能卡。智能卡是一种小型嵌入式设备通过PC/Win32 API连接的读卡器接受命令。如果你想使用这个API,你将需要一个智能卡如SIM卡,还有一个智能卡的读卡器。
简单的智能卡框架
SC框架是一个设计与智能卡沟通的接口。很少的类通过不同的参数来操作智能卡的控制命令,我们正在使用的类取决于互操作模式。
这个智能卡接口允许通过.net程序进行简单的访问。稍后我们将看到如何实现此接口同时使用的互操作性技术。
spublic interface ICard
{
string[] ListReaders();
void Connect(string Reader, SHARE ShareMode,
PROTOCOL PreferredProtocols);
void Disconnect(DISCONNECT Disposition);
APDUResponse Transmit(APDUCommand ApduCmd);
void BeginTransaction();
void EndTransaction(DISCONNECT Disposition);
}
类APDUCommand和APDUResponse是用来向卡发送命令和得到的卡的响应。共享协议,和DISCONNECT是一个常量,在PC/SC上。
public class APDUCommand
{
public APDUCommand(byte bCla, byte bIns,
byte bP1, byte bP2, byte[] baData, byte bLe);
public void Update(APDUParam apduParam);
public override string ToString();
public byte Class;
public byte Ins;
public byte P1;
public byte P2;
public byte[] Data;
public byte Le;
}
public class APDUResponse
{
public APDUResponse(byte[] baData);
public byte[] Data;
public byte SW1;
public byte SW2;
public ushort Status;
public override string ToString();
}
增加支持智能卡触发事件
当卡插入阅读器或离开,PC/SC可以让你处理这些事件。因此,我增加一个智能卡事件支持的.net基础框架模型。CardBase类,继承了来自ICard接口。实施支持两个事件,CardInserted 和 CardRemoved。到目前为止,我只执行了这项支持CardNative 。如果你想在你的项目中支持这个事件,你只需要执行CardInsertedEventHandler 和 CardRemovedEventHandler.
abstract public class CardBase : ICard
{
public event CardInsertedEventHandler OnCardInserted = null;
public event CardRemovedEventHandler OnCardRemoved = null;
abstract public string[] ListReaders();
abstract public void Connect(string Reader,
SHARE ShareMode, PROTOCOL PreferredProtocols);
abstract public void Disconnect(DISCONNECT Disposition);
abstract public APDUResponse Transmit(APDUCommand ApduCmd);
abstract public void BeginTransaction();
abstract public void EndTransaction(DISCONNECT Disposition);
public void StartCardEvents(string Reader);
public void StopCardEvents();
abstract protected void RunCardDetection();
protected void CardInserted();
protected void CardRemoved();
}
我开发了关于接口ICard两个实现。一种是使用COM互操作性,另一种是使用 P/Invoke的本地互操作性。实现的方式是一样的。此外用P/Invoke执行协议框架,以便有可能开发智能卡应用的手持机。
CardCOM:一个COM互操作实现类
在.net中,COM的互操作行最简单的方式是重复使用旧代码。所有版本的Studio .NET都对COM有很好的支持。你只需要添加一个引用的COM对象到你的项目当中,并且他是一个通用的DLL动态库,并有必要的类使用的接口。基本上你不需要写任何代码。不过,您的COM组件必须遵守一些规则,特别是关于参数的方法。由于不同的PC/SC COM组件是在.NET出现前就出现的,和一些接口不完全符合的COM互操作性。这就是我为什么要开发自己的COM接口。对于重要的接口,ISCard和它的接口采用了输入限制。
interface ISCardDatabaseEx : IDispatch{
[id(1), helpstring("method ListReaders")]
HRESULT ListReaders([out,retval] VARIANT* ppReaders);
};
用COM组件开发取代我设计的ISCardDatabase接口,只有实现它的一个方法:ListReaders。在微软实施,返回参数是的SAFEARRAY BSTR ,不幸的是.NET中不能正确导入。正确的方法是使用一个VARIANT*包含的SAFEARRAY BSTR 。然后,.net将产生的包装方法,返回一个对象,你只需要投入一个string[]。使用COM对象。 NET中很简单,只要增加一个参考到这个对象在您的代码。Visual Studio然后将生成一个包装类,你直接使用您的代码。以下摘录说明了这一点。
using SCARDSSPLib; // 用 SCard COM 对象
/// <summary>
/// 默认构造
/// </summary>
public CardCOM()
{
// Create the SCard object
m_itfCard = new CSCardClass();
}
public override void Connect(string Reader,
SHARE ShareMode, PROTOCOL PreferredProtocols)
{
// Calls AttachReader to connect to the card
m_itfCard.AttachByReader(Reader,
(SCARD_SHARE_MODES) ShareMode,
(SCARD_PROTOCOLS) PreferredProtocols);
}
这 ISCardDatabase接口提供了一个DLL ,必须用Regsvr32来注册这个动态库 。
分享到:
相关推荐
总结,射频卡协议ISO14443为非接触式智能卡提供了标准化的通信框架,确保了设备间的互操作性和数据安全。其Type A和Type B两种类型满足了不同应用场景的需求,广泛应用于日常生活中的多种服务中。理解并掌握ISO14443...
智能卡的种类很多,包括常见的接触式IC卡、非接触式IC卡(又称射频卡)和双界面卡等。其中,智能密码钥匙是一种特殊的非接触式智能卡,它主要应用于个人数字身份的认证,提供加密和数字签名等功能。 在智能卡领域...
这部分规定了非接触式智能卡系统中的射频接口和信号参数。它定义了工作频率(13.56 MHz)、调制技术(副载波幅度调制)以及能量传输方式,使卡片能够从读写器接收能量并进行无源操作。此外,14443-1还涵盖了传输速率...
《NFC射频卡国际标准ISO14443详解》 ISO14443标准是近场通信(Near Field Communication, NFC)领域的重要规范,尤其在非接触式智能卡技术中占据核心地位。这一标准由国际标准化组织(International Organization ...
以ARM处理器为核心实现采集、计量和对用户负载进行监控,上位机管理系统采用后台机在线值班模式,实时的对上传数据进行显示、分析和计费管理,射频卡以无线射频天线为载体,以RFID射频方式从上位机和智能电表二者...
《基于RFID的智能公交刷卡系统》是一款利用C#编程语言开发的应用程序,结合了射频识别(RFID)技术,旨在实现公共交通领域的自动化票务管理。RFID是一种非接触式的自动识别技术,通过无线电频率信号来自动识别目标...
智能磁卡考勤系统是一种基于现代化信息技术的管理工具,它结合了Delphi数据库开发技术和射频磁卡技术,为企事业单位提供了高效、准确的员工考勤管理解决方案。在这个系统中,射频磁卡(RFID)作为身份识别介质,员工...
非接触式智能卡技术是现代信息技术中的一个重要领域,它基于国际标准ISO14443进行规范。这个标准集合提供了全面的技术指南,用于设计、制造和使用非接触式智能卡,这些卡片广泛应用于身份识别、支付系统、公共交通、...
题目:基于51单片机射频RFID卡考勤上课上班人数计数系统设计(毕业设计) 设计框架: 本设计由STC89C52单片机电路+RFID模块电路+1602液晶显示电路+按键电路+蜂鸣器报警电路+电源电路组成。 功能: 1、系统有3张卡...
在IT行业中,智能卡技术是安全认证和数据存储的关键领域,尤其在支付系统、门禁控制、身份识别等应用场景中广泛使用。IC卡,全称为集成电路卡,是这种技术的核心载体。本文将深入探讨IC卡的类型、开发过程以及相关的...
ISO7816标准定义了智能卡的物理特性、电气特性、命令集以及应用框架,而ISO14443则规定了近距离无线通信的射频部分,常见于门禁卡、公交卡等。 德卡读卡器和龙杰读卡器是常见的智能卡读写器品牌,德卡(OmniKey)以...
而非接触式IC卡则通过射频信号进行通信,如公交卡、门禁卡等。这两种类型的卡都需要遵循一定的通信协议,如ISO/IEC 7816标准对于接触式卡,以及ISO/IEC 14443标准对于非接触式卡。 实现IC卡号的获取,首先要具备...
继电器是一种具有隔离功能的自动开关元件,广泛应用于遥控、遥测、通讯、自动控制、机电一体化及电力电子设备中。继电器控制的核心程序通过高低电平信号来控制继电器的导通或断开,进而控制坨机转动以实现开门或关门...
在IT行业中,读卡器发卡程序是一种用于与智能IC卡进行交互的软件应用。智能IC卡,全称为集成电路卡,常用于存储信息、身份验证、支付等多种场景。本程序的核心功能是读取和写入IC卡的数据,下面将详细阐述相关知识点...
该技术由射频卡、读卡器和天线三个基本部分组成,具有无需直接接触、远距离读取数据、高速处理的优点。在公交系统中,RFID技术可以实现车辆的不停车远距离自动识别,快速采集车辆进出站和通过信息采集点的数据,从而...
在国家金卡工程第七次全国IC卡应用工作会议上的讲话中提到了RFID技术作为未来重要发展方向的重要性。 **6.6 我国标签芯片发展现状** 中国在RFID标签芯片的研发和生产方面取得了显著进展,但仍然面临着技术和市场...
NFC技术允许电子设备在短距离内进行非接触式点对点数据传输,广泛应用于智能手机、智能卡、支付终端等设备中。ISO 10373-6 2010标准为NFC终端产品提供了射频性能测试的参考框架,帮助制造商确保其产品符合特定的技术...
M1卡是MIFARE Classic系列的简称,它是一种基于非接触式射频识别(RFID)技术的智能卡。MIFARE卡包括S50和S70两种类型,其中S50卡通常有1K字节的存储空间,而S70卡则有4K字节。这些卡片采用了分块的存储结构,每个...