服务与支持 SERVICE SUPPORT

    • 关于射频卡读写器RD800M/RD900M装载密码函数的正确使用

    我们以最常用的MIFARE ONE卡来说明。该卡有16个扇区,每个扇区都有独立的密码,包括A密码和B密码。如果需要对某一扇区操作就必须对该扇区进行密码校验。密码校验的方式分两种。下面将分别说明。
       一种是常规的被大多数读卡器厂商所采用的方式。首先将要校验的扇区密码装载到读写器的保密存储区中,每个扇区对应不同的保密存储区。这样在校验卡的时候,读写器会根据扇区号来和读写器中对应的保密存储区中的密码进行校验,如果密码相同就通过校验,可以 进行以后的读写工作。这种方式的特点是密码装载到读写器的保密存储区后将一直保留,断电后也不会丢失。用户如果不需要改变密码的话,就不用调用dc_load_key函数再次下载密码。有些程序代码在寻卡的循环中包含dc_load_key函数,这样是不必要的。读写器保密存储区是系统模块中的EEPROM,在PHILIPS的资料中说明该区域可擦写的次数最少在10万次以上,但该区域还是有次数限制的,如果长期的执行装载密码操作将减少读写器保密存储区的使用寿命。


    第二种是当需要经常对不同密码的卡进行核对而使用的方式。该方式不用提前将密码装载到读写器的保密存储区中。只需要在校验卡的时候同时将密码传递给读写器就可以进行校验。对应的函数声明如下:
    int dc_authentication_pass(int icdev,unsigned char _Mode,unsigned char Addr,unsigned char *passbuff)
    功 能:核对密码函数,用此函数时,可以不用执行dc_load_key()函数
    参 数:icdev: dc_init返回的设备描述符
           _Mode:密码验证模式0—KEYA   4—KEYB
           Addr:要验证密码的扇区号
           passbuff:6字节密码字符串
          返 回:成功返回0
    这种方式大多是在卡片采用一卡一密的时候使用,可以避免频繁的对读写器的保密存储区操作。该函数在RD800M/RD900M 7.1版本中被支持。
    除了上述的两种方式以外还有根据读写器的SAM安全模块产生密钥进行卡片校验的方式。可以根据客户不同的SAM安全模块和特殊要求来定制使用方式,以用于安全保密性要求很高的系统中。
     

    • 关于读写器使用的一些注意事项

    一、 插拔式卡座

    1、 对于插拔式卡座,读写器中采用的是德国进口的DDM卡座,插卡时候有到位开关感觉,就是在插入到快到位时候有一点停顿的感觉,然后再插入卡会有‘咯噔’的到位感觉,就表明正确插入卡片了。
    2、 要注意防止插卡过于用力,过于用力会损伤卡座的到位开关,而且对卡也有一定的伤害。
    3、 注意保持卡片的清洁,如果卡的芯片不洁,不仅卡片无法正常工作,而且也会对卡座的接触点造成污染。
    4、 卡到位后再操作这点非常重要,在不稳定的情况下读写器对卡进行上电操作,有可能会对卡造成损害。
    5、 插拔式卡座中的卡在操作完成后,应用程序应该首先发命令让读写器对卡片进行下电操作,下电完成后将卡拔出。在没有下电的情况下将卡拔出有可能对卡造成损害。

    二、 推推式卡座

    1、 推推式卡座采用推入卡片,取出时再推入卡片会弹出卡片。这种结构减少了卡片和触电之间的摩擦,对保护卡片有一定的优势。但如果不正确使用也会损伤卡片。
    2、 最常见的错误情况是取出卡片的时候不是再次推入让卡片自动弹出,而且直接把卡片拔出,这种情况会严重的损害卡片,而且也会严重损害卡座。
    3、 注意保持卡片的清洁,任何结构的卡座最终都是要和卡的芯片触电紧密接触,所以如果卡的芯片不洁,会对任何种类的卡座的触点造成污染。

    三、 IC卡的使用环境和方法

    持卡人的妥善保管及正确的使用是延长IC卡的使用寿命及可靠性的最经济有效的手段。妥善保管,不随意弯曲,不随意用手接触触点,不随意接近强静电环境,注意保持卡表面清洁等,将有助于提高IC卡的使用可靠性,延长使用寿命。

    四、 清洁卡的使用

    清洁卡是在读写器使用一段时间后,卡座的触点受到了污染后采用的一种清洁措施。清洁卡的使用方法是:在断电的情况下将清洁卡插入读写器,来回插入后将卡座的触电清洁。
    清洁卡是以聚酯、聚乙烯、聚丙烯或硬质纸张为原料制成清洁卡基体,清洁卡基体的表面热合或粘合一层无纺布、含磨料(氧化铝或碳化硅)无纺布、细砂纸、细砂布或具有清洁能力的纺织物等清洁材料层,按上述结构制作而成的一定规格的清洁卡,插入卡机中,插拔几次清洁卡,即可将卡机触点表面清洗干净,极为方便,而且效果明显,可有效地确保卡机长期正常运行。

    • 读写器的常见问题集锦

    各种读卡器的常见问题
    1.卡片芯片朝上朝下问题
    卡片在读卡器中芯片朝上或朝下的问题,是根据读卡器的型号的不同而有区别的:RD600、RD600U、RD600P、RD600W-T、RD600S-T、RD600S-U-T读卡器中的卡片芯片朝上; RD600W-B、RD600S-B、RD600S-U-B读卡器中的卡片芯片朝下;
    2.自动测卡问题
       RD600演示程序中的自动测卡功能仅供参考,不是判断卡型的唯一标准,因为在测卡时读的是特征字节,而卡的特征字节有可能因卡的生产商不同而有所不同,当测卡不准时,请手动选卡型号。
    3.验证密码问题
       接触式读卡器在验证密码时,如果在前一次核对密码正确后而没下电的情况下,无论输入任何密码它都认为是正确的,只有下电后才能判断密码的正确与否。
    4.RD900ID的参数问题
       RD900ID-S读卡时需要打开超级终端,通讯速率为:1200BPS;RD900ID-P则只需打开一个文档即可。还有种情况就是读卡器RD900ID是根据客户的要求定制的,采用的波特率和输出数据方式都有所差异,欲知详细情况请与我们的技术员联系。
    5.USB读卡器
       在使用USB读卡器时,不能先接读卡器,而是应该先安装USB驱动,然后再接上USB读卡器,这时系统会自动找到设备的。
    6.RD800M
       在RD800M演示程序中,使用自动测试功能后,如果再继续其它操作得先对卡下电(即把卡片从感应区移开);如果要对射频卡读卡器改变波特率继续工作,应该对读卡器先断电,然后波特率才能够修改成功,因为读卡器只有在刚通电的情况下,才处于自动侦测波特率的状态。
    7.IC_InitType
       此函数不是测卡函数,它没有测卡功能,它的作用是告诉读卡器将要操作的卡型号而已。
    8.初始化串口错误
       串口资源已经被占用,(包括初始化串口后非正常退出而未关闭串口,然后再去初始化串口); 计算机与读写器通讯的波特率与读写器默认波特率不一致;计算机与读写器通讯的串口与读写器默认串口不一致;设备连接不正确,接触不正常。
    9.DES算法加减密
       在VB中,部分数据在使用DES算法加密减密后与原文有所不同,解决办法为:可将密文定义为全局变量,直接传递给解密函数解密;或者将加密后的密文以BYTE表示,用传地址方式传递。
    10.擦除
       102、1604卡只有在数据成功擦除后,才能够正确地写入新的数据;对102卡写数据时起始地址必须为偶数,数据长度也必须为偶数。
    11.DT4C28、4406卡操作时的注意事项
      <1>该卡是先擦除后写,也就是如果要写入的地方不是FF的时候必须要先擦除该字节,然后才能写入数据.
      <2>该卡是借位擦除,比如说想把字节12处的数据擦除为FF,就必须st=IC_Erase_4406
      (p_NowCom,13),也就是擦除高一位的字节;不能写入为FF的数据,如果已经是FF,就不用写。(千万要注意!!!!!!!)如果想写为FF,必须用earse.比如:在16开始要写入"11ff2233",就不能直接写入IC_Write_Hex(icdev,16,4, "11ff2233"); 应该是:先执行IC_Erase_4406(p_NowCom, 18); IC_Write_ Hex(icdev, 16,1,
    "11");最后IC_Write_Hex(icdev,18,2, "2233");
       <3>该卡核对完密码后,9是错误记数,10,11,12是密码,这些字节因为一般不是FF,所以就要接着擦除密码区的数据。st=IC_Erase_4406(p_NowCom,13);st=IC_Erase_4406(p_NowCom,12);st=IC_Erase_4406(p_NowCom,11);st=IC_Erase_4406(p_NowCom,10);   这四个函数一定要按顺序执行!
       <4> 最后一定要注意的是,个人化操作,也就是写第8个字节为"7F"(有可能不同),一定要放在最后所有的数据已经写完后写。
     

    • Hex为后缀的函数说明

    字符的描述方法有多种,如字母‘A’,在ASCII表中,它的十进制表为65,十六进制表示方法为0x41,数字‘1’,它的十进制数表示为48,十六进制数表示为0x31。一个字符串是由一个个字符联接在一起组成字符串,如‘AB12’是一个字符串,一般使用十六进制表示这个字符串即将十六制的单个表示联在一起,即‘41423132’,当然也是一个字符串,但这个十六进制的字符串中只包含字符‘0’-‘9’和‘A’-‘F’。

    使用DCIC演示程序,可明显的看出,如图:

    下面就一个函数来说明一下:
    IC_Read(HANDLE idComDev,__int16 offset,__int16 len,unsigned char * databuffer);
             如卡内的地址0,开始的8个字符为:ABCD1234,程序代码如下:
             unsigned char buff[32];注意此处的缓冲区大小
    status=IC_Read(icdev,0,8,buffer);
             if(status==0)
                       ;读成功
    else
                       ;读失败

    如果以上代码读成功,则buffer中包含内容‘ABCD1234’

    但如果用IC_Read_Hex来读,则buffer中的内容为‘4142434431323334’
           

    再举一个核对密码的例子,一般说密码,如SLE4442,密码是‘B62307’,这是十六进制的表示方法,实际上为ACSII表中对应的字符,但可能不可识别,即不为数字字母也不为一些常见符号等,此时使用核对密码的函数一般会用:
             char Password[7]="b62307";
        st=IC_CheckPass_4442hex(icdev,(unsigned char *)Password);     
             当然也可以使用如下的例程:
             pass[3]={0xb6,0x23,0x07};
    IC_CheckPass_SLE4442(ICDev,pass);

    在DCIC读写器开发包中包含很多_Hex结尾的函数,用法都类似。请自行参考\examples目录中的例程。注意,在读类的函数中使用HEX方式,缓冲区的申请一定是长度的两倍,否则会出现溢出错误,导致系统崩溃。

首页上一页1下一页末页