我想MSCAPI keystore在Java中加载一个并检查MY商店中的可用证书.但是,这些证书的某些密钥驻留在硬件令牌上,并且弹出窗口在加载期间要求令牌.
有没有办法在加载Windows密钥库时推迟加载私钥?
keyStore = KeyStore.getInstance("Windows-MY", "SunMSCAPI");
keystore.load(null,null);
Run Code Online (Sandbox Code Playgroud) 目前,我正在一个团队中创建自定义POS解决方案.我们想要集成IC /信用卡终端(就像我们拥有的VeriFone,即Vx510).我认为最简单的模式是允许收银员手动输入客户必须支付的金额.以更先进(理想)的方式,我们的POS将向终端发送要支付的金额.
无论"模式"如何,如果交易成功与否,我们都希望从VeriFone获取信息.这是我们达到的死胡同.AFAIK,为了对VeriFone终端进行编程或与之集成,您必须成为经过认证的VeriFone开发人员.如果是这样,那么我知道从哪里开始.如果没有,请告诉我.
有没有其他方法可以获得付款成功的终端信息?是否有任何第三方库与此类设备进行通信?与我的问题最相关我能找到的SO线程是这个,但对我来说没什么帮助.我们不想处理任何机密数据,因此我们不想与Authorize.NET集成
我正在尝试在Java应用程序中实现基于Yubikey NEO OpenPGP智能卡小程序的PGP加密.这似乎是一个黑暗的艺术,并不容易谷歌这个东西,但这里是我到目前为止的地方:
卡被初始化,密钥使用gpg工具生成.它通常有效.我有.asc格式的公钥,并设法加载它org.bouncycastle.openpgp
使用javax.smartcardioAPI 连接USB加密狗中的智能卡.
选择OpenPGP小程序
val pgpAID = bytes(0xD2, 0x76, 0x00, 0x01, 0x24, 0x01)
val answer = cardChannel.transmit(CommandAPDU(0x00, 0xA4, 0x04, 0x00, pgpAID))
Run Code Online (Sandbox Code Playgroud)成功向卡片出示正确的PIN码
val pin = "123456"
return bytes(0x00, 0x20, 0x00, 0x82, pin.length) + pin.toByteArray(Charsets.UTF_8)
Run Code Online (Sandbox Code Playgroud)发送准成功(见下文)decipher命令
bytes(0x00, 0x2a, 0x80, 0x86, data.size) + data + bytes(0x00)
Run Code Online (Sandbox Code Playgroud)
何时data = "xxxx".toByteArray(),结果是SW=9000(=成功)但没有返回数据.这是一个天真的测试,因为第52页的OpenPGP applet文档提到了这一点
在加密之前,命令输入(填充指示符字节除外)应根据PKCS#1格式化.
我不知道如何加密数据并将其转换为PKCS#1格式.
我也试过阅读Yubico OpenPGP卡实现测试,但它只提供了另一个"失败"的例子(第196行).我尝试运行它,但结果是不同的:测试期望SW=0050(表示异常?)和我得到的是SW=6f00(没有精确的诊断,根据这个文件).
我用完整的代码创建了一个GitHub存储库.它是用Kotlin编写的,但应该很容易阅读.
我在ubuntu 11.10上使用OpenJDK(java版"1.6.0_22")运行最新的opensc 0.12.2
我可以阅读我的智能卡(飞天ePass PKI)
pkcs15-tool --dump
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用带有keytool的智能卡:
keytool
-providerClass sun.security.pkcs11.SunPKCS11 \
-providerArg /etc/opensc/opensc-java.cfg \
-keystore NONE -storetype PKCS11 -list
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
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
Run Code Online (Sandbox Code Playgroud)
当我运行相同的命令时启用调试选项,如下所示:
keytool
-providerClass sun.security.pkcs11.SunPKCS11 \
-providerArg /etc/opensc/opensc-java.cfg \
-keystore NONE -storetype PKCS11 -list \
-J-Djava.security.debug=sunpkcs11
Run Code Online (Sandbox Code Playgroud)
它突然起作用:
... debug infos ...
Enter keystore password:
sunpkcs11: login …Run Code Online (Sandbox Code Playgroud) 我在Eclipse中开发了一个Java Card applet并获得了一个cap文件.然后我使用jcManager - Java安全卡管理器将该文件加载到我的智能卡.我有两种类型的智能卡:
我的智能卡读卡器是:SDI011双接口读卡器.
另外,对于开发SIM applet,我正在使用Gemalto Developer Suite [3.6].该IDE有一个GSM模拟器,我的SIM小程序可以很好地工作.它给出了applet的cap,jar,jac,exp ..文件.
到目前为止一切都很好,但我想将该cap文件加载到我的联系人或非接触式Java卡[因为我没有可用的SIM卡],然后发送 - 接收APDU消息.
可能吗?如果有,怎么样?如何将我的SIM小程序加载到真正的智能卡 [ 不是SIM卡 ]?
我有一张java卡,我写了一个小代码,将APDU发送到java卡.这里当我发送Init_Update命令时,得到0x6985像: -
CMD -> 80 50 00 00 08 11 22 33 44 55 66 77 88
RES <- 6985
Run Code Online (Sandbox Code Playgroud)
但是当我用其他工具发送此命令时,它会给出所需的结果,如: -
Transmit: 80 50 00 00 08 []
11 22 33 44 55 66 77 88 ."3DUfw.
Card answered: 61 1C
Run Code Online (Sandbox Code Playgroud)
我的java代码对我有的其他java卡很有用.谁能告诉我这种不同行为的原因是什么?
// full java code
public static void main(String[] args) {
// TODO code application logic here
try
{
factory = TerminalFactory.getDefault();
terminals = factory.terminals().list();
terminal = terminals.get(0);
card = terminal.connect("*");
channel =card.getBasicChannel();
CommandAPDU cmdAPDU;
ResponseAPDU response;
byte[] …Run Code Online (Sandbox Code Playgroud) 我已经使用过智能卡,我熟悉APDU命令(在ISO/IEC 7816和全球平台规范中定义).
现在我想知道是否有办法将APDU命令发送到插入手机的USIM/SIM卡?(安装了Android v4.4.4 kitkat的三星A3.)
我已经在谷歌搜索过,我发现了一些名为SIM Toolkit Application和Seek for Android的相关主题和工具.但我真的不明白这些是什么?这些项目是我必须在手机上安装的两个应用程序吗?或者这两个工具是否已经安装在USIM/SIM卡上并从手机接收命令?
主动命令,APDU命令和AT命令有什么区别?
我应该学习android来开发SIM卡应用程序还是我只需要Java Card规范和ETSI标准?
提前致谢.
有不同的智能卡支持ISO 14443-4.例如,Mifare Plus及其本机命令集.或其他具有不同命令集的卡(即7816-4 APDU).
我为读卡器开发了一些软件,我需要确定卡支持哪些命令(例如,它是否支持ISO 7816-4结构中的命令).
建议区分它们的方法是什么?我应该从Mifare Plus命令集中尝试一些命令并检查我是否得到正确的回复?或者有更聪明的方法吗?
我需要通过智能卡读卡器读取Maestro/Mastercard的帐号.我正在使用Java 1.6及其javax.smartcardio包.我需要发送APDU命令,它会询问存储在卡芯片上的EMV应用程序的PAN号.问题是,我找不到常规的字节数组来构造APDU命令,它会在任何地方返回所需的数据......
我正在寻找APDU找到联系少的ISO 14443智能卡的UID以及如何使用它在Linux终端上打印.问题是我发现很多人都在谈论它,但没有解决方案.谁能帮到这方面呢??? 谢谢