500分求解:明华cpu卡片相关问题

yassee 2005-06-02 09:29:47
1,新卡片要初始化吗?卡片初始密钥是多少?

2。建立或访问mf,df等都要先验证各自的密钥mk吧?验证密钥语句如何写那?

3. vb中建立mf语句如下,为什么通不过?
'///create MF
wdata(0) = &H80 'CLA create MF
wdata(1) = &HE0 'INS
wdata(2) = &00 'mF
wdata(3) = &00 '
wdata(4) = &H18
wdata(5) = &HFF '8字节传输密钥
wdata(7) = &HFF
wdata(8) = &HFF
wdata(9) = &HFF
wdata(10) = &HFF
wdata(11) = &HFF
wdata(12) = &HFF
wdata(13) = &HFF
wdata(14) = &HFF
wdata(15) = &HF ''权限
wdata(16) = &H31 '1PAY.SYS.DDF01
wdata(17) = &H50
wdata(18) = &H41
wdata(19) = &H59
wdata(20) = &H2E
wdata(21) = &H53
wdata(22) = &H59
wdata(23) = &H53
wdata(24) = &H2E
wdata(25) = &H44
wdata(26) = &H44
wdata(27) = &H46
wdata(28) = &H30
wdata(29) = &H31
St = cpu_protocol(icdev, 30, wdata(0), rdata(0))
If St <> 0 Then
List1.AddItem (" error")
Exit Sub
End If

4: cpu卡命令应用数据单元格式:CLA,INS,P1, P2,Lc,数据域,Le。但在cpu_protocol函数中不是以此格式。我查阅明华案例,发送的命令串send_cmd 包括:
NAD+PCB+LEN+COMMAND+BCC。请问NAD,PCB,BCC是什么。

谢谢,期待有开发经验的大侠尽快解答。
...全文
258 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yassee 2005-06-03
  • 打赏
  • 举报
回复
特别感谢Wenking003(文君) 还有其他诸位,结帖!
另外300分我另外开帖特请Wenking003(文君)笑纳!
Wenking003 2005-06-02
  • 打赏
  • 举报
回复
4: cpu卡命令应用数据单元格式:CLA,INS,P1, P2,Lc,数据域,Le。但在cpu_protocol函数中不是以此格式。我查阅明华案例,发送的命令串send_cmd 包括:
NAD+PCB+LEN+COMMAND+BCC。请问NAD,PCB,BCC是什么。

首先:CLA,INS,P1, P2,Lc,数据域,Le---是cpu卡命令应用数据单元格式。
而:cpu_protocol()是读写器的接口命令,两者是不同的概念。

说明书上有说明:
int cpu_protocol(int icdev,int len, unsigned char *send_cmd,
unsigned char *receive_data)
说明: 按照CPU卡传输协议向读写器发送命令串
参数: icdev: 初始化返回的设备标识符
send_cmd: 对卡操作的命令串
(这里才是按:CLA,INS,P1,P2,Lc,数据域,Le填写)
len: 命令串的长度
receive_data: CPU卡返回的数据串
返回: = 0 正确
〈 0 错误

Wenking003 2005-06-02
  • 打赏
  • 举报
回复
3. vb中建立mf语句如下,为什么通不过?
'///create MF

wdata(0) = &H80 'CLA create MF
wdata(1) = &HE0 'INS
wdata(2) = &00 'mF
wdata(3) = &00 '
wdata(4) = &H18
wdata(5) = &HFF '8字节传输密钥 --->传输代码是从5~12
wdata(7) = &HFF --->这里跳了一个
wdata(8) = &HFF
wdata(9) = &HFF
wdata(10) = &HFF
wdata(11) = &HFF
wdata(12) = &HFF
wdata(13) = &HFF
wdata(14) = &HFF --->传输代码后面是文件权限:
wdata(15) = &HF --->接着是短文件标识
wdata(16) = &H31 '1PAY.SYS.DDF01
wdata(17) = &H50
wdata(18) = &H41
wdata(19) = &H59
wdata(20) = &H2E
wdata(21) = &H53
wdata(22) = &H59
wdata(23) = &H53
wdata(24) = &H2E
wdata(25) = &H44
wdata(26) = &H44
wdata(27) = &H46
wdata(28) = &H30
wdata(29) = &H31

信息排列有问题,你改正试试。
Wenking003 2005-06-02
  • 打赏
  • 举报
回复
1、新卡片要初始化吗?卡片初始密钥是多少?
新卡片是要通过初始化才能使用的。所谓初始化就是按照应用的要求建立MF、DF、key文件和其它数据文件。
初始化是要通过“厂商传输代码”的验证才能实施,不同的COS、不同的版本都可能不同。如果厂家没有给“厂商传输代码”给你,你可以用8个&HFF试试。
你用的是那个版本的COS?

2、建立或访问mf,df等都要先验证各自的密钥mk吧?验证密钥语句如何写那?
是的,建立和访问MF、DF都必须满足相应的状态机的要求,可以通过校验PIN、外部认证等方法来改变状态机的状态。
但可以在任何时候SELECT MF。

其它的问题,请让我看后看能否回答。
fangpenghappy 2005-06-02
  • 打赏
  • 举报
回复
俺用的是明华IC卡,自己开发,买读卡器的时候不是带有实例吗?
CPU卡还没在开发计划中,帮顶
hsghxm 2005-06-02
  • 打赏
  • 举报
回复
不懂~表示关注!
DooDu 2005-06-02
  • 打赏
  • 举报
回复

另建议在硬件区问下,毕竟用vb搞这个的不多。
yassee 2005-06-02
  • 打赏
  • 举报
回复
谢谢一楼兄弟帮顶,分绝不吝啬!
zuoxingyu 2005-06-02
  • 打赏
  • 举报
回复
兄弟,偶不懂.
帮顶是种美德
of123 2005-06-02
  • 打赏
  • 举报
回复
我是卡来通的工程师,搞 CPU 卡的。你的问题:

1 初始化的概念比较混乱。有些 COS 要求执行 Init 命令,清空内存,然后才可以创建文件系统。有些 COS 的初始化是指建立一些基本文件系统,此后允许用户添加自己的应用。
至于用户创建文件系统,一般称为发卡。

2 建立 MF 或 DF 是否需要密钥认证,取决于 COS 设计。一般来说,需要用户初始化的卡片,会要求通过传输密钥认证来取得权限。如果是已经存在 MF 的卡片,可能要求通过默认主控密钥认证。
总之,要仔细阅读 COS 说明,或看厂商提供的例子。

4 你所用的读卡器的问题。看来它仅仅是一个透明的传输工具,工作在数据链路层。所以你必须传输数据链路层的命令。对于 T=1 协议(如果卡是此协议),是要发送数据帧的。NAD+PCB+LEN+INF+EDC 都是帧中的字段:

NAD 结点地址
PCB 协议控制字节
LEN 信息字段长度
INF 信息字段,此处放你的 APDU 命令
EDC 检错码,以上所有字节的异或值

如果你是刚上手,建议使用我公司的 CPU 卡学习套装。包括 USB 接口 PC/SC 协议读卡器 CRR0303(绝对工作在应用层)、2 张 CPU 卡(社保卡规范)和学习软件(图形界面方式创建文件系统,显示 APDU 代码和 RPDU 应答信息)。附送:金融卡和石化加油卡演示软件(均显示APDU 代码和 RPDU 应答信息)。我公司的技术支持是最好的。

看看网站 http://www.cret.com.cn

Wenking003 2005-06-02
  • 打赏
  • 举报
回复
哦,你使用的是T=1的协议,T=1协议的传输基本组成如下:
开始字段:包括NAD PCB LEN
信息字段:包括INF
结尾字段:包括EDC

其中,NAD长1字节=00,
PCB长1字节=0x40,
LEN长1字节(表示INF的数据长度),
INF长0~254字节(就是CPU卡的实际指令),
EDC长1字节(EDC为开始字段和信息字段的出错校验码。)

你在使用前,是否已执行:
ic_init()和int cpu_reset()指令?
yassee 2005-06-02
  • 打赏
  • 举报
回复
明华的,型号:DP-R123
Wenking003 2005-06-02
  • 打赏
  • 举报
回复
1、关于卡片初始化:一般是指把从工厂得到的新的卡片(由厂家传输密钥所控制),按照应用的需要建立起卡片的MF及相关的密钥文件(安装主控密钥、维护密钥等)和应用文件等,在上面的讨论中,关于建立MF实际上就是初始化的一个部分,也是卡片初始化的第一步。

2、关于传输密钥的认证,就是在建立MF时输入的传输代码值(在LC的值后面的部分,一般是8个&HFF),在建立MF时,COS首先核对这个传输代码的正确与否,如果n次都不对(不同COS的次数不同)就会把卡片锁死。

3、在执行完Creat MF后,文件的安全条件并没有马上生效,你可以马上建立KEY文件,并安装KEY,等所有的建立工作完成后,你再执行CreatEnd MF指令,此时第一次的初始化工作结束,安全条件才会有效。

4、你使用的什么厂家的读写器?不同的读写器的指令集是不同的。
yassee 2005-06-02
  • 打赏
  • 举报
回复
谢谢文君兄,修改后,仍然后通不过,我注意看了一下手册,建mf前条件:
1。卡初始化
2。建mf前先认证制造商密钥,初始化密钥为“0”值。
3。在mf下建文件,必须通过mf的主控密钥mk的认证。
也就是说,在执行那段建mf的代码前我得要初始化且认证制造商密钥,但我不知道如何认证它,而且mf得主控密钥如何建立?
另:明华案例中有段获得随机数的代码:
wdata(0) = &H0 'nad
wdata(1) = &H40 'pcb 不明白什么意思..
wdata(2) = &H5 'length
wdata(3) = &H0 'get random 这段代码3-7才是cpu卡命令应用数据单元格式
wdata(4) = &H84
wdata(5) = &H0
wdata(6) = &H0
wdata(7) = &H8
wdata(8) = &H0 'bcc
For i = 0 To 7
wdata(8) = wdata(i) Xor wdata(8) 'bcc calculation 这个有什么含义?
Next i

st = cpu_protocol(icdev, 9, wdata(0), rdata(0))
If st <> 0 Then
List1.AddItem ("Transfer error")
Exit Sub
End If
如果参照这段代码写,我是不是在那段建mf代码头尾都得加上nad,pcb等:
wdata(0) = &H0 'nad
wdata(1) = &H40 'pcb
wdata(2) = &H29 'length 3-31
wdata(3) = &H80 'CLA create MF
wdata(4) = &HE0 'INS
wdata(5) = &00 'mF
wdata(6) = &00 '
...........
..........
wdata(32)=&H0 'bcc
For i = 0 To 31
wdata(32) = wdata(i) Xor wdata(32) 'bcc calculation
Next i

st = cpu_protocol(icdev, 33, wdata(0), rdata(0))
If st <> 0 Then
List1.AddItem ("Transfer error")
Exit Sub
End If

\\初始化是要通过“厂商传输代码”的验证才能实施,不同的COS、不同的版本都可能不同。如果厂家没有给“厂商传输代码”给你,你可以用8个&HFF试试。
用8个&HFF如何试??

???初次接触cpu卡,实在是不明白... :((

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧