有谁做过ic卡的应用程序开发?入门问题,高分求解。

hero 2002-04-02 10:28:24
我用acs30 智能卡,想在上面做些简单应用。装的厂商提供的pc/sc规范的驱动,可惜不会使用。
微软提供的Resource Manager API中怎么校验密码?得到卡的详细信息?
如果用它的Base Service ,应该怎么入手?
...全文
74 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lid617914 2002-04-06
  • 打赏
  • 举报
回复
kingzai() 老兄
把你的那个acsr的pdf文件也发给我一份好吧??
感谢
lid617@21cn.com
kingzai 2002-04-03
  • 打赏
  • 举报
回复
我用的是厂商提供的驱动程序(pc/sc),然后用它的API写了一个类,就这样,你要看随硬件提供的API文档(PDF格式)
几个关键的函数
BOOL CCardXXX::ReadBin(UINT nOffset, char* pBuf, UINT nLen)
{
int nToRead = nLen;
int nStart = nOffset;
char* pBufTemp = pBuf;
while (nToRead > 0)
{
int nTemp = min(nToRead, 32);

AC_APDU Apdu;
memset(&Apdu, 0, sizeof(AC_APDU));

Apdu.CLA = 0x00; // Instruction Class
Apdu.INS = ACI_Read; // Command
Apdu.P1 = BYTE((nStart & 0xff00) >> 8); // MSB of starting address
Apdu.P2 = BYTE(nStart & 0x00ff); // LSB of starting address
Apdu.Lc = 0x00;
Apdu.Le = nTemp;

//Exchange APDU with the ACR10 reader
m_nRetCode = AC_ExchangeAPDU(m_nDeviceID, &Apdu);

if (m_nRetCode < 0)
{
return FALSE;
}
memcpy(pBufTemp, Apdu.DataOut, nTemp);

nToRead -= nTemp;
nStart += nTemp;
pBufTemp += nTemp;
}

return TRUE;
}
BOOL CCardXXX::WriteBin(UINT nOffset, char* pBuf, UINT nLen)
{
int nToWrite = nLen;
int nStart = nOffset;
char* pBufTemp = pBuf;
while (nToWrite > 0)
{
int nTemp = min(nToWrite, 32);

AC_APDU Apdu;
memset(&Apdu, 0, sizeof(AC_APDU));

Apdu.CLA = 0x00; // Instruction Class
Apdu.INS = ACI_Write; // Command
Apdu.P1 = BYTE((nStart & 0xff00) >> 8); // MSB of starting address
Apdu.P2 = BYTE(nStart & 0x00ff); // LSB of starting address
Apdu.Lc = nTemp;
Apdu.Le = 0x00;
memcpy(Apdu.DataIn, pBufTemp, nTemp);

//Exchange APDU with the ACR10 reader
m_nRetCode = AC_ExchangeAPDU(m_nDeviceID, &Apdu);
if (m_nRetCode < 0)
{
return FALSE;
}
nToWrite -= nTemp;
nStart += nTemp;
pBufTemp += nTemp;
}

return TRUE;
}
BOOL CCardStorage::VerifyPIN(BYTE* sPIN)
{
AC_APDU Apdu;
memset(&Apdu, 0, sizeof(AC_APDU));
Apdu.CLA = 0x00; // Instruction Class
Apdu.INS = ACI_Verify; // Command
switch (m_nCardType)
{
case AC_AM8KS :
Apdu.P1 = 0x00; // MSB of starting address
Apdu.Le = 0x03;
break;
case AC_AM2KS :
Apdu.P1 = 0x00;
Apdu.Le = 0x04;
break;
default :
m_nRetCode = -1008;
return FALSE;
}

Apdu.Lc = m_nPinLen; // PinLen
memcpy(Apdu.DataIn, sPIN, m_nPinLen);
//Exchange APDU with the ACR10 reader
m_nRetCode = AC_ExchangeAPDU(m_nDeviceID, &Apdu);

return (m_nRetCode >= 0);
}
关键的就这几个函数










hero 2002-04-03
  • 打赏
  • 举报
回复
kingzai() 老兄,非常感谢!给分。
顺便把你的那个acsr的pdf文件发给我一份行吗?或者告诉我网址。我从www.acs.com.hk厂商下载的和你的不一样!
再次感谢!
kingzai 2002-04-02
  • 打赏
  • 举报
回复
它有提供一套API接口的,包括读写,设置PIN码等操作,你再在这上面封装一层不就行了
quengzi 2002-04-02
  • 打赏
  • 举报
回复
帮你推了!
Tasehouny 2002-04-02
  • 打赏
  • 举报
回复
我写过磁卡的读写!

IC卡,朋友写过,好像是用的华南金卡什么的!

也是提供了一个DLL,几个API,至于难度,我就不清楚了!
三杯倒 2002-04-02
  • 打赏
  • 举报
回复
用的厂商附带提供的API
hero 2002-04-02
  • 打赏
  • 举报
回复
到此为止了吗?写个ic卡应用程序很难吗?
hero 2002-04-02
  • 打赏
  • 举报
回复
kingzai() 老兄,再问你一个问题,当时你装的driver是pc/sc还是psc的那一种?如果是pc/sc,用厂商的api读取能成功吗?

hero 2002-04-02
  • 打赏
  • 举报
回复
kingzai() 老兄,能把你做的部分程序发给我吗?只要密码验证、文件存取部分。
谢谢,谢谢。
kingzai 2002-04-02
  • 打赏
  • 举报
回复
去看看微软最新的Platform SDK smart card,我是用的厂商附带提供的Acsr20系列API。如果自己做,我想应该是可以的
hero 2002-04-02
  • 打赏
  • 举报
回复
我想用微软的api,这样0卡的类型变化,程序变化不大,难道不可能实现吗?那么微软的api,尤其是smart card Service 只能写驱动吗?

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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