我想听一下智能购物车的插入和删除事件......该应用程序适用于Windows,智能卡使用的是x.509证书.我使用的读卡器是插入大多数新笔记本电脑的标准读卡器,您也可以购买它们以供USB使用.
我发现的一件事是:cryptware.it/apidoc/scapi/index.html但它不是唯一的方法,我只想知道我的选择......
有谁知道最好的方法是什么?
提前致谢!
我想使用WMI在我的系统上获取所有PCSC智能卡读卡器的DeviceID和服务.它们都是通过USB连接的,所以我查询所有Win32_PnPEntity的WMI注册表.但我不知道如何确定哪些设备是"读卡器".这是我已经拥有的:
ManagementObjectSearcher mos =
new ManagementObjectSearcher(@"\root\cimv2", @"Select * From Win32_PnPEntity");
ManagementObjectCollection mob = mos.Get();
foreach (ManagementObject mo in mob)
{
Console.WriteLine("DeviceID: " + mo["DeviceID"].ToString());
Console.WriteLine("Service: " + mo["Service"].ToString());
}
Run Code Online (Sandbox Code Playgroud)
我不能只是过滤设备名称,有不同的品牌/型号的读者,并没有共同点.在设备管理器中,它们都归为"智能卡读卡器",因此必须采用(其他)方式.
我正在尝试通过我的LG P710 Optimus L7 2读取智能卡.
我正在学习本教程
我可以选择"1PAY.SYS.DDF01"目录,
我可以选择应用程序
但我无法执行"获取处理选项"它总是导致6700错误(Lc或Le错误)
这是我的代码
NfcAdapter mNFCAdapter;
Intent intent;
PendingIntent pendingIntent;
private TextView mTextView;
String[][] techList;
IntentFilter[] filters = new IntentFilter[3];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView) findViewById(R.id.title);
mNFCAdapter = NfcAdapter.getDefaultAdapter(this);
intent = new Intent(getApplicationContext(), getClass());
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
techList = new String[][]{
new String[]
{ MifareClassic.class.getName() },
new String[]
{ IsoDep.class.getName() }
};
filters[0] = new IntentFilter();
filters[0].addAction(NfcAdapter.ACTION_NDEF_DISCOVERED);
filters[0].addCategory(Intent.CATEGORY_DEFAULT);
// add type of tag …Run Code Online (Sandbox Code Playgroud) 我把我的java卡的ISD状态设置为SECURED状态.我想知道与OP_READY相比,这种新状态卡丢失的能力是什么?
注意:当我尝试时,我可以在卡上上传并安装新的.cap文件并成功删除它们[在这个新的ISD状态]!
如果有人解释不同状态之间的主要差异,我会感恩的吗?我已经阅读了全球平台规范2.2.2,但不幸的是我有点难以理解!
我正在尝试从我的pcsc java代码中读取卡UID/HCE android设备UID.但我收到以下错误
javax.smartcardio.CardException: sun.security.smartcardio.PCSCException: Unknown error 0x1f
Run Code Online (Sandbox Code Playgroud)
虽然当我尝试获取UID时我能够获得ATS位但是我得到了这个错误.我从这里提到了我的代码
码
import java.io.Console;
import java.util.List;
import java.util.ListIterator;
import java.util.Scanner;
import javax.smartcardio.ATR;
import javax.smartcardio.Card;
import javax.smartcardio.CardChannel;
import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.CommandAPDU;
import javax.smartcardio.ResponseAPDU;
import javax.smartcardio.TerminalFactory;
public class PCSC {
private byte[] atr = null;
private String protocol = null;
private byte[] historical = null;
public CardTerminal selectCardTerminal() {
try {
// show the list of available terminals
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
ListIterator<CardTerminal> terminalsIterator …Run Code Online (Sandbox Code Playgroud) 我在同一张智能卡上有2张小卡片,我想要进行通信.
我可以选择一个小程序,然后发送相应的APDU,然后取消选择它并选择另一个等..我想知道是否有可能做到这一点 更正确 与逻辑信道?我的意思是使用一种方法可以让我不为每个APDU命令选择/取消选择每个applet?
先感谢您 :)
我在javacard applet中声明BigNumber数据类型时遇到了问题.如果我只是评论声明,applet正确加载到模拟器中.问题的确切原因是加载import.cap文件时(jcshell:错误代码:6a80(数据错误))
java卡套件2.2.2使用
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
import javacard.framework.JCSystem;
import javacardx.framework.math.BigNumber;
public class LargeBal extends Applet {
// CLA byte
public static final byte BANK_CLA = (byte) 0x80;
// INS byte
public static final byte INS_GET_BALANCE = 0X02;
public static final byte INS_CREDIT = 0X04;
public static final byte INS_DEBIT = 0X06;
/**
* SW bytes for Arithmetic exception
*/
final static short INVALID_NUMBER_FORMAT = 0x6308;
/**
* Initial account balance
*/
final static byte[] INITIAL_ACCOUNT_BALANCE …Run Code Online (Sandbox Code Playgroud) 我试图从传入的智能卡APDU读取数据并返回相同的传入消息,同时还将ASCII字"响应"附加到消息的前面.我正在获得一个6F00地位.我该如何修复代码?
我的代码:
private void repeat(APDU apdu) {
byte[] buffer = apdu.getBuffer();
apdu.setIncomingAndReceive();
byte[] incomingMsg = getData(buffer);
if ((short) incomingMsg.length != (short) 0) {
apdu.setOutgoing();
// Send back the "respond " + "<incoming message" back
byte[] respMsg = {0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x20};
byte[] outgoingMsg = new byte[(short) (incomingMsg.length + respMsg.length)];
ArrayLogic.arrayCopyRepack(respMsg, (short) 0, (short) respMsg.length, outgoingMsg, (short) 0);
ArrayLogic.arrayCopyRepack(incomingMsg, (short) 0, (short) incomingMsg.length, outgoingMsg, (short) respMsg.length);
buffer = outgoingMsg;
apdu.setOutgoingAndSend((short) 0, (short) outgoingMsg.length);
}
} …Run Code Online (Sandbox Code Playgroud) 一些智能卡支持SCP 01和SCP02是什么意思?以及如何在这两者之间做出选择?它是在安全域中预定义还是有一些命令可以选择一个或其他选择?