SmartCard学习之libpcsclite

本文通过一个示例代码介绍了如何使用libpcsclite库进行智能卡操作,旨在帮助读者理解智能卡操作的基本流程和相关函数的运用。主要涉及的库包括libccid、pcscd、libdbus-1-dev和libpcsclite-dev。编译命令为`gcc -g -o smartcard smartcard.cpp -lpcsclite -I /usr/include/PCSC/`。
摘要由CSDN通过智能技术生成

下面这一段代码,不是在所有卡片上都能成功运行。
写出来的意义是,让大家对于智能卡操作的流程有个大致了解,大致熟悉一下相关函数怎么用。
具体API文档,微软介绍的很清楚,网上也很多,不赘述。

基本上流程就是:

基本流程

安装的库基本上就那么几样东西:

libccid pcscd libdbus-1-dev libpcsclite-dev
差不多就这几个吧,不够的就再查查,哈哈哈哈

make命令大致如下:

gcc -g -o smartcard smartcard.cpp -lpcsclite -I /usr/include/PCSC/


/// File Name: smartcard.cpp

#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include "pcsclite.h"
#include "winscard.h"
#include "reader.h"

int main(void) {
    SCARDCONTEXT m_hContext;
    SCARDHANDLE  m_hCard;
    SCARD_IO_REQUEST io;
    char pmszReaders[512];
//  BYTE CAPDU[] = {0x00,0x84,0x00,0x00,0x08};
//  BYTE CAPDU[] = {0xFF,0xA4,0x00,0x00,0x01,0x06};
    BYTE CAPDU_0[] = {0x00,0xA4,0x00,0x00,0x02,0x3F,0x00};  //get main folder 0x3F00
    BYTE CAPDU_1[] = {0x00,0x84,0x00,0x00,0x08};    //get random number,8 bytes

//  BYTE CAPDU_1[] = {0xFF,0xA4,0x00,0x00,0x01,0x06};   //reset, power down and up
    BYTE CAPDU_2[] = {0xFF,0xB0,0x00,0x00,0xFE};    //read card, 0x00 -> 0x08
    BYTE RAPDU_0[1024];
    BYTE RAPDU_1[1024];
    BYTE RAPDU_2[1024];
    DWORD rr0 = 1024, rr1 = 1024, rr2 = 1024;
    DWORD cch = 100;
    DWORD i = 0;
    DWORD ret = 0;

    //Create contex
    printf("Create contex ");
//  ret = SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &m_hContext);
    ret = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &m_hContext);
    if(SCARD_S_SUCCESS != ret)
    {
        printf("error: 0x%lx = %ld\n"
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值