2023年12月11日发(作者:)

深圳市明华智能设备有限公司

RD接触IC卡读写器

ActiveX控件函数说明文档

第2.0版

摘 要 本文对RD-EB接触IC卡读写器ActiveX控件函数使用进行了说明。

关键词 RD-EB;IC卡;读写器;ActiveX控件;WEB:windows平台

作 者 胡伟俊

部 门 客服部

生效日期:

版本号:

1

概述.................................................................................................................................................. 4

1.1

1.2

1.3

1.4

运行环境 ................................................................................................................................. 4

硬件环境 ................................................................................................................................. 4

ACTIVEX控件说明 ................................................................................................................. 4

安装调试ACTIVEX控件 ........................................................................................................ 4

1.4.1

1.4.2

1.4.3

2

在WEB网页中调用MWReader控件 ........................................................................... 5

本地调试 ......................................................................................................................... 6

通过WEB服务器进行调试 ........................................................................................... 6

安全建议.......................................................................................................................................... 6

2.1

2.2

密钥保护措施 ......................................................................................................................... 6

数据防篡改 ............................................................................................................................. 6

3

ACTIVEX控件函数说明 .............................................................................................................. 7

3.1

设备操作函数组 ..................................................................................................................... 7

所有函数最后返回值 ..................................................................................................... 7

3.1.2

打开读卡器(串口) .......................................................................................................... 8

3.1.3

关闭读卡器(串口) .......................................................................................................... 8

3.1.4

控制设备蜂鸣器 ............................................................................................................. 8

3.1.5

4428卡从指定地址读数据 ................................................................................................ 8

3.1.6

4428卡从指定地址带保护位读数据 ................................................................................ 9

3.1.7

4428卡向指定地址写数据并保护 .................................................................................... 9

3.1.8

4428卡保护指定地址的数据 ............................................................................................ 9

3.1.9

4428卡核对卡密码 .......................................................................................................... 10

3.1.10

4428卡改写卡密码 ...................................................................................................... 10

3.1.11

4428读出卡密码 .......................................................................................................... 10

3.1.12

4428卡检查卡型是否正确 .......................................................................................... 10

3.1.13

4442

卡函数列表 ......................................................................................................... 10

3.1.14

加解密函数列表 ........................................................................................................... 11

3.1.15

24C系列函数列表 ....................................................................................................... 12

3.2

工具函数 ............................................................................................................................... 12

3.2.1

将16进制数转换为ASCII字符 ................................................................................. 12

3.2.2

将ASCII字符转换为16进制数 ................................................................................. 13

3.1.1

1 概述

1.1 运行环境

URD-EB接触IC卡读写器ActiveX控件()是针对我公司URD-EB接触IC卡读写器产品开发的ActiveX控件,为32位windows ActiveX控件,适用于Windows98/me/2000及 WindowsNT4.0以上平台,由基于WEB的二次开发者使用。

提供的文件有:

: MWReader控件文件

: WEB开发的DEMO程序

URD-EB通用读卡器ActiveX控件函数说明文档.doc:使用说明

: 简要说明

1.2 硬件环境

URD-EB接触IC卡读写器通过PC机USB接口与PC机通信,使用时根据读写器使用手册说明,将读写器与PC机USB接口连接。

1.3 ActiveX控件说明

ActiveX控件包含URD-EB接触IC读写器的设备操作函数、射频卡操作函数和智能卡函数组成,提供了WEB开发中的ActiveX控件函数接口,同时本文最后提供了用JavaScript脚本语言调用MWReader的方法,以及提供了常规读写器操作的示例。

MWREADER ActiveX控件的函数参数分为数字数据类型和字符串数据类型两种,由于WEB页面中脚本语言数据类型是弱类型,因此在调用之前需要转换为正确的数据类型后传递才可以使用。在向读取或者写射频卡的操作函数中,涉及到的16进制数据全部以待操作数据的16进制字符表现形式传递,在二次开发时需要将字符形式表示的16进制串转换为真正的二进制数据。大部分函数返回一个状态码(WEB中为字符串),状态码含义如下:

==0 正确;

<0 错误;

1.4 安装调试ActiveX控件

MWReader控件是自动安装并且自动注册的,在使用ActiveX控件之前首先设置IE浏览器的安全设置选项。打开IE浏览器,点菜单工具-Internet选项-安全-自定义级别,做以下设置:

“对没有标记为安全的ActiveX控件进行初始化和脚本运行”设置为“提示”;

“下载未签名的ActiveX控件”设置为“提示”;

如果没有设置上述两个选项,则IE采取高安全级别设置,会禁止MWReader下载运行。

1.4.1 在WEB网页中调用MWReader控件

ATL 3.0 test page for object MWReaderCtl

CLASSID="CLSID:

VIEWASTEXT>

参数: classid

Id

MWReader控件的CLASSID

8E06D862-4D98-11D7-A40B-5254AB51CC00 "

MWReader控件的实例变量,通过脚本语言访问

可以通过网页脚本语言JavaScript和VBScript引用变量id进行调用,执行MWReader控件的读卡器功能。

1.4.2 本地调试

在网页文件中放置标识后,会自动加载文件,并且自动进行注册。打开网页后,可能会经过IE的几个关于ActiveX控件的提示对话框,选择是即可。

如果在运行过程出现网页脚本语言错误,则说明控件没有注册成功,检查IE的安全设置后重新操作。

1.4.3 通过WEB服务器进行调试

当所有二次开发的WEB页面完成之后,将WEB页面程序放置到IIS服务器下,任何客户端机器都可以通过IE浏览器访问IIS服务器上的URD-EB读卡器的资源文件。客户端必须设置IE的安全选项,否则不能下载控件。客户端IE浏览器自动下载控件后,自动安装并且注册控件,便可以访问读卡器设备了。

2 安全建议

根据我公司多年从事IC卡行业项目经验,IC卡交易安全性是系统设计的重点;系统安全分为IC卡密钥保护和数据防篡改。系统基于WEB模式,所有的网页脚本和交易数据都是开放。建议密钥保护和数据安全管理方法。

2.1 密钥保护措施

在网页中用脚本调用控件方法计算IC卡密钥,把IC密钥明文暴露在网页中,非常危险。

基于IC卡密钥不能明文传递原则,网页脚本不能使用控件函数传递密钥。我公司设计密钥装载导入方法:

把PSAM卡计算IC卡密钥的流程,植入读写器主控制器中,算出的密钥值直接用于IC卡验证,不经过网页脚本导入设备,这样密钥不会被用户非法截获。

2.2 数据防篡改

数据在传输方式上有三种类型:明文方式、明文校验方式和密文校验方式。对以明文方式进行传输的数据由传输管理器直接送给命令处理模块。当数据以校验或密文校验方式传 输时需要加密运算器对数据做处理。

在网络上进行卡交易我们应采用明文校验方式或密文校验方式。用户在网页上输入交易数据ABC,先传送给服务器确认数据的合法性,服务器采用DES或3DES算法对数据增加校验码MAC后,回传终端,把数据ABC+MAC当作一个参数传递给控件校验,用Psam卡的密钥验证数据的合法性,再写入IC卡中。

服务器

ABC加密并增加校验码MAC

用户输入数据ABC

用户终端

ABC+MAC传递给控件,利用Psam卡密钥判断数据合法性,再写入IC卡

具体的实现方法要通过双方讨论实现,本文没有实现控件方法。

3 ActiveX控件函数说明

3.1 设备操作函数组

3.1.1 所有函数最后返回值

函数中的

BSTR databuff 参数说明;

ff 传入变量。

例.0xaf 数据应转化为字符串"AF"

0x12、0x13 0xed databuff数据应转化字符串"1213ed"

参数.应传入字符串长度。

3.变量传出。例.变量传出字符串1234fa 数据为0x12 0x34 0xfa

.传入的长度应为十六进制数据的长度。

属性:LastRet;

返回值:==0 正确。

<>0 错误。

3.1.2 打开读卡器(串口)

函数:MWic_init (short port, long baud)

参数:

port表示用于通信的PC机串口号,0到31分别代表串口1到32。

Baud 设备通讯波特率。

说明: 使用读写器前调用此函数打开串口并连接读写器,LastRet。

注:USB接口读写器,不关心port/Baud参数的设置。

3.1.3 关闭读卡器(串口)

函数: MWic_exit ()

返回值:LastRet;

说明: 该函数与打开读写器函数配套使用,用于关闭串口并断开读写器。

3.1.4 控制设备蜂鸣器

函数: MWdv_beep (short _msec)

参数: _msec: 蜂鸣时间,单位:毫秒

返回值:LastRet

3.1.5 4428卡从指定地址读数据

函数: BSTR * MWsrd_4428(short offset, short len);

参数: offset: 偏移地址,其值范围0~1023

len: 字符串长度,其值范围1~1024

return 读出字符串数据(ASCII)

<0 错误

3.1.6 4428卡从指定地址带保护位读数据

函数: BSTR* MWrdwpb_4428(short offset, short len, BSTR *databuff);

参数: offset: 偏移地址,其值范围0~1023

len: 字符串长度,其值范围1~1024

返回: databuff: 存放要读出的数据,其大小应为(2*len)*2

<0 错误

3.1.7 4428卡向指定地址写数据

函数: MWswr_4428 (short offset, short len, BSTR *databuff);

参数: offset: 偏移地址,范围0~1023

len: 字符串长度,范围1~1024

databuff: ASCII存放要写入的数据

返回: <0 错误

=0 正确

3.1.8 4428卡向指定地址写数据并保护

函数: MWwrwpb_4428(short offset, short len, BSTR *databuff);

参数: offset: 偏移地址,范围0~1023

len: 字符串长度,范围1~1024

databuff: ASCII存放要写入并加保护的数据

返回: <0 错误

=0 正确

3.1.9 4428卡保护指定地址的数据

函数: MWpwr_4428(short offset, short len, BSTR *databuff);

参数: offset: 偏移地址,其值范围0~1023

len: 字符串长度,其值范围1~1024

databuff: ASCII字符串保护数据,必须和卡中已存在的数据一致

返回: <0 错误

=0 正确

3.1.10 4428卡核对卡密码

函数: MWcsc_4428(short len, BSTR *databuff);

参数: len: 密码个数,其值为4

databuff: 密码字符串指针

返回: return 0;--ok

return <0;--error;

3.1.11 4428卡改写卡密码

函数: MWwsc_4428(short len, BSTR *databuff);

参数: len: 密码个数,其值为4

databuff: 新密码地址指针

返回: return <0;--error;

3.1.12 4428读出卡密码

函数: BSTR * MWrsc_4428(short len);

参数: len: 密码个数,其值为4

返回: 读出密码databuff(ASCII)

return <0;--error;

3.1.13 4428卡检查卡型是否正确

函数: MWchk_4428();

返回: return 0;--ok

return <0;--error;

3.1.14 4442 卡函数列表

1、从指定地址读数据

BSTR * MWsrd_4442(short offset, short len);

返回: return 0: --ok

return <>0:--error;

2、读保护位

BSTR *MWprd_4442(short offset, short len);

返回: return 0: --ok

return <>0:--error;

3、向指定地址写数据

MWswr_4442(short offset, short len, BSTR *databuff);

返回: return 0: --ok

return <>0:--error;

4、保护指定地址的数据

MWpwr_4442(short offset, short len, BSTR *databuff);

返回: return 0: --ok

return <>0:--error;

5、读出密码错误计数器值

MWcsc_4442(short *counter);

返回: return 0: --ok

return <>0:--error;

6、核对卡密码

MWcsc_4442(short len, BSTR *databuff);

参数: len: 密码个数,其值为6

databuff: 密码字符串指针

返回: return 0;--ok

return <0;--error;

7、改写卡密码

MWwsc_4442(short len, BSTR *databuff);

参数: len: 密码个数,其值为6

databuff: 密码字符串指针

返回: return 0;--ok

return <0;--error;

8、读出卡密码

BSTR *MWrsc_4442(short len);

返回: return 0: --ok

return <>0:--error;

9、检查卡型是否正确

MWchk_4442();

返回: return 0: --ok

return <>0:--error;

3.1.15 加解密函数列表

MWDES_Encrypt(BSTR *Key, short KeyLen, BSTR *Source, short SrcLen, BSTR *Result,short

*ResultLen)

return 0;

MWDES_Decrypt(BSTR *Key, short KeyLen, BSTR *Source, short SrcLen, BSTR *Result,short

*ResultLen)

return 0;

3.1.16 24C系列函数列表

_24c64()

return 0;--ok

return <0;--error;

_24c64(short offset, short len, BSTR *databuf)

return 0;--ok

return <0;--error;

_24c64(short offset, short len, BSTR *databuff)

return 0;--ok

return <0;--error;

3.2 工具函数

3.2.1 将16进制数转换为ASCII字符

BSTR* MWhex_asc(BSTR *hex, unsigned char hexlen, BSTR *asc)

功 能: 将16进制数转换为ASCII字符。

参 数:

hex: 16进制数

hexlen: 16进制数的长度

返 回: 转换后的字符串

LastRet <0 失败

例: unsigned char source[] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};

char dest[17];

int st=0;

memset(dest, 0, 17);

dest= MWhex_asc (source, 8); // the dest value is “67788”.

3.2.2 将ASCII字符转换为16进制数

BSTR* MWasc_hex(BSTR *asc, unsigned char asclen)

功 能: 将ASCII字符转换为16进制数。

参 数:

asc : ASCII字符

ascLen: ASCII字符的长度

返 回: hex 转换后的十六进制

<0 失败

例: char source[] = {a,0,a,1,a,2,a,3,a,4,a,5};

unsigned char dest[7];

int st = 0;

memset(dest, 0, 7);

// the dest value is {0xa0,0xa1,0xa2,0xa3,0xa4,0xa5}.

dest= MWasc_hex (source, 12);