Tag: smartcard

APDU读取文件java卡程序

我用netbeans制作了java卡经典applet 当我编程读取操作时,我检查APDU中的第一个字节是0x80然后第二个是0xB0然后从字节2和3获取我将从文件中读取的偏移量然后取字节数为从字节4读取 将APDU作为默认值 0x80 0xB0 0x00 0x03 0x60这从当前文件读取60个字节,以偏移号3开始 当我尝试这个命令时它返回错误Input data length != Lc around line 12 。 经过一些重试,我发现了问题 问题是编译器假设字节4是数据的长度,所以在我的命令中他等待60个字节 当我搜索时,我发现当INS=B0时,字节4并不意味着发送数据长度 我不知道为什么它这样做,当我尝试调试编译器时甚至没有进入过程函数。 我的脚本文件是 0x00 0xA4 0x04 0x00 0X06 0X87 0XF1 0X3F 0X5E 0X22 0X47 0x7F; 0x80 0xA4 0x00 0x00 0x02 0x3F 0x00 0x7F; 0x80 0xA4 0x00 0x00 0x02 0x50 0x15 0x7F; 0x80 0xA4 0x00 0x00 0x02 […]

SmartCardIO EMV阅读器,找到我的卡类型只有ATR号码

我正在开始一个新项目,我是新的使用EMV阅读器和Javax SmartCardIO。 我有每种类型的卡的RID列表,但是我唯一可以在不知道卡类型的情况下访问的是ATR,我想知道是否有办法获得RID或卡类型只有这个信息,欢迎任何帮助。 提前致谢! 编辑: 我尝试使用此方法执行select PSE命令: public static byte[] selectPSE(CardChannel channel) throws CardException { byte[] selectPSE = {(byte)0x00, (byte)0xA4, (byte)0x04, (byte)0x00, (byte)0x0E, (byte)0x31, (byte)0x50, (byte)0x41, (byte)0x59, (byte)0x2E, (byte)0x53, (byte)0x59, (byte)0x53, (byte)0x2E, (byte)0x44, (byte)0x44, (byte)0x46, (byte)0x30, (byte)0x31}; CommandAPDU command = new CommandAPDU(selectPSE); ResponseAPDU response = channel.transmit(command); System.out.println(response.getBytes()); return response.getBytes(); } 但是,它只与AMEX和Visa合作,我得到了两张万事达卡(信用卡和借记卡)的错误6a82。 这看起来很奇怪,据我所知,所有主要的发卡机构(包括万事达卡)都使用1PAY.SYS.DDF01,我可以通过试用和错误的AID得到我想要的信息,但我不认为这是最好的解。

使用JAVA智能卡API读取NFC标签不适用于MAC OS

我正在开发一个从NFC读卡器(ACR122U-A9)设备读取NFC标签UID的应用程序。 我使用JAVA和javax.smartcardio API来检测NFC阅读器和阅读NFC标签。 该应用程序的function是在NFC读取器设备与PC连接或断开连接时显示通知。 然后,如果设备已连接且显示NFC标签,则显示NFC标签显示的通知。 我试图找到基于事件的api来实现上述function但我找不到所以我使用Java Timer和Polling来获取NFC读取器设备和NFC标签。 以下是我的示例JAVA代码,用于轮询NFC设备和标签。 import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.List; import java.util.Timer; import java.util.TimerTask; import java.util.logging.Level; import java.util.logging.Logger; import javax.smartcardio.CardTerminal; import javax.smartcardio.TerminalFactory; /** * * @author sa */ public class NFC_Test { /** * @param args the command line arguments */ static Timer timer; public static void main(String[] args) { try […]

使用java commandAPDU读取SLE4442智能卡中的写入数据?

我想在SLE4442智能卡上读写数据我有ACR38U-i1智能卡读卡器 对于写入,我使用此命令APDU byte[] cmdApduPutCardUid = new byte[]{(byte)0xFF, (byte)0xD0, (byte)0x40,(byte)0x00, (byte)4,(byte)6,(byte)2,(byte)6,(byte)2}; 并为读取数据 byte[] cmdApduGetCardUid = new byte[]{(byte)0xFF,(byte)0xB0,(byte)0x40,(byte)0x00,(byte)0xFF}; 两者都是执行并发送SW = 9000但没有一个数据接收响应APDU就像我写6262数据但它没有收到 我也在写入和读取命令之前使用Select命令 select命令是 byte[] cmdApduSlcCardUid = new byte[]{(byte)0xFF,(byte)0xA4,(byte)0x00,(byte)0x00,(byte)0x01,(byte)0x06}; 有没有人在SLE4442智能卡中读取和写入正确的java代码?

如何从Java中读取EMV SmartCard中的PAN

我需要使用智能卡读卡器读取Maestro / Mastercard的帐号。 我正在使用Java 1.6及其javax.smartcardio包。 我需要发送APDU命令,它会询问存储在卡芯片上的EMV应用程序的PAN号。 问题是,我找不到常规的字节数组来构造APDU命令,它会在任何地方返回所需的数据……

从Linux 64位访问javax.smartcardio

我正在尝试使用javax.smartcardio API加载智能卡终端,代码如下: public CardTerminal getReadyCardTerminal() throws CardException { TerminalFactory factory = TerminalFactory.getDefault(); CardTerminals terminals = factory.terminals(); List list = terminals.list(State.CARD_PRESENT); while (list.isEmpty()) { terminals.waitForChange(1000); list = terminals.list(State.CARD_PRESENT); } CardTerminal cardTerminal = list.get(0); return cardTerminal; } …而且我总是得到以下exception: java.lang.IllegalStateException: no terminals at javax.smartcardio.TerminalFactory$NoneCardTerminals.waitForChange(TerminalFactory.java:145) 在Windows Vista / 7上一切正常,但我不能让它在Linux上运行。 我正在使用Ubuntu 12.04 64位。 我使用以下命令安装了pcscd服务: sudo apt-get install libccid pcscd libpcsclite-dev […]

坏填充exception – pkcs11中的RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING

我的应用程序正在访问e-Token以解密来自服务器的响应 来自服务器的会话密钥使用以下方式加密: – RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING 我正在使用SunPKCS11 Provider来实现对加密令牌的访问。 每当我尝试使用上述机制解密时,即使用RSA / ECB / OAEPWITHSHA-256ANDMGF1PADDING,我得到: – **javax.crypto.BadPaddingException: doFinal() failed at sun.security.pkcs11.P11RSACipher.implDoFinal(P11RSACipher.java:328) at sun.security.pkcs11.P11RSACipher.engineDoFinal(P11RSACipher.java:353) at javax.crypto.Cipher.doFinal(DashoA13*..) 以下是我的代码: – private static final String TRANSFORMATION = “RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING”; private static final String SECURITY_PROVIDER = “BC”; private static final String DIGEST_ALGORITHM = “SHA-256”; private static final String MASKING_FUNCTION = “MGF1”; […]

智能卡终端删除:SCARD_E_NO_SERVICE CardException

我正在开发一个使用smartcardio来处理智能卡的Java应用程序。 必须有一个可以移除其USB读卡器,然后再次插入它而无需再次启动小程序。 我正在使用terminals()和waitForChange()方法来检测终端更改,它在Linux,MacOS和Win7上运行正常。 但是在Windows 8(仅限Windows 8)上,删除最后一个终端后,这些方法抛出SCARD_E_NO_SERVICE CardException ,并且不再检测到任何更改。 我不确定它所说的“服务”是什么。 但是当我调用TerminalFactory.getDefault()来创建一个TerminalFactory单例时,我认为这是在我的线程中启动的。 而且我认为这个单例可能有办法管理底层服务,这就是被打破的。 有没有人知道如何在Windows 8上使用smartcardio管理终端断开连接?

带有opensc pkcs#11提供程序的java keytool仅适用于启用调试选项

我在ubuntu 11.10上使用OpenJDK运行最新的opensc 0.12.2(java版本“1.6.0_22”) 我可以阅读我的智能卡(飞天ePass PKI) pkcs15-tool –dump 现在我尝试使用带有keytool的智能卡: keytool -providerClass sun.security.pkcs11.SunPKCS11 \ -providerArg /etc/opensc/opensc-java.cfg \ -keystore NONE -storetype PKCS11 -list 这会导致错误: keytool error: java.security.KeyStoreException: PKCS11 not found java.security.KeyStoreException: PKCS11 not found at java.security.KeyStore.getInstance(KeyStore.java:603) at sun.security.tools.KeyTool.doCommands(KeyTool.java:621) at sun.security.tools.KeyTool.run(KeyTool.java:194) at sun.security.tools.KeyTool.main(KeyTool.java:188) Caused by: java.security.NoSuchAlgorithmException: PKCS11 KeyStore not available at sun.security.jca.GetInstance.getInstance(GetInstance.java:159) at java.security.Security.getImpl(Security.java:696) at java.security.KeyStore.getInstance(KeyStore.java:600) … 3 more […]

使用Java进行通用访问卡(CAC)身份validation

我正在寻找一个地方,开始学习如何使用java与政府CAC卡接口。 最终,我的目标是找出如何使用CAC卡身份validation(通过PIN号码)授权访问使用Tomcat / J2EE服务器托管的网站。 但我需要从某个地方开始。 所以我想我开始编写一个小的java程序来简单地从CAC卡读取CAC卡信息,CAC卡插入键盘上的读卡器(DELL键盘上带有CAC阅读器,位于数字键盘上方)。 通过搜索谷歌,我发现了由OpenSSO项目取代的cacard java项目( https://cacard.dev.java.net/ )。 但我似乎无法找到如何使用它连接到卡,从卡读取等的示例代码。 有谁知道我在哪里可以找到一些示例代码,以便我可以开始学习如何使用java与CAC卡进行交互? 谢谢 编辑: 在研究了更多之后,我想,我能在server.xml文件的connector元素中设置clientAuth=”true”吗? http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html clientAuth:如果希望Tomcat要求所有SSL客户端提供客户端证书以使用此套接字,请将此值设置为true。