我应该如何开始使用C#(.NET)编程智能卡?首先我只需要知道,读卡器的名称是什么(例如Omnikey)并将其打印出来.
感谢答案,Ales.
我是Java Card Programming(使用netbeans)的新手.我在Java Card Development Quick Start页面中做了所有事情,我创建了一个经典的卡片小程序,并尝试模拟它.但是当我尝试在设备控制台上模拟并发送命令时,它会发送错误
"Connection refused: connect".
我不明白,有什么不对.
有什么建议?
这是它的屏幕截图:
我正在开发一个smartcardio用于处理智能卡的Java应用程序.必须有一个可以移除其USB读卡器,然后再次插入它而无需再次启动小程序.
我正在使用terminals()和waitForChange()方法来检测终端更改,它在Linux,MacOS和Win7上运行良好.
但是在Windows 8(仅限Windows 8)上,删除最后一个终端后,这些方法抛出一个SCARD_E_NO_SERVICE CardException,并且不再检测到任何更改.
我不确定它所说的"服务"是什么.但是当我打电话TerminalFactory.getDefault()给一个TerminalFactory单身人士时,我认为这是在我的主题中启动的.而且我认为这个单例可能有办法管理底层服务,这就是被打破的.
有没有人smartcardio在Windows 8 上如何管理终端断开?
这个问题专门与MIFARE Ultralight C / EV1或MIFARE DESFire EV1甚至NTAG卡有关。我想实现一个令牌系统,以便普通用户每次读取其中一张卡时,都会得到一个可用的令牌。该令牌将从他们正在读取的NFC卡中“弹出”。换句话说,每次读取NFC芯片时,它将从卡的存储中发出不同的可用令牌。这可能实现吗?
我正在编写一个智能卡应用程序,并在成功选择带有AID的应用程序后,发送获取处理选项
我得到6E 00作为响应 - 无效的CLA命令.这是发送命令并接收响应的代码的一部分:
ResponseAPDU rapdu = sendCommand(new byte[]{(byte)0x80, (byte)0xA8, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x83, (byte)0x00, (byte)0x00});
private ResponseAPDU sendCommand(byte[] apdu) throws CardException{
CommandAPDU capdu = new CommandAPDU(apdu);
ResponseAPDU rpd = channel.transmit(capdu);
return rpd;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用相同的命令使用Jaccal库读取卡片并且它工作正常,但由于它使用了外部dll文件,因此jaccal不适合我的应用程序.我不知道为什么它会给我这种回应.
以下代码使用PKCS#11设备(智能卡)创建客户端身份验证的SSL上下文.这一切都适用于Java 6:
// Configure the SunPkcs11 provider
String pkcs11config;
pkcs11config = "name = Cryptoki";
pkcs11config += "\nlibrary = /SCDriver/libbit4ipki.dylib";
InputStream confStream = new ByteArrayInputStream(pkcs11config.getBytes());
SunPKCS11 sunpkcs11 = new SunPKCS11(confStream);
Security.addProvider(sunpkcs11);
// Specify keystore builder parameters for PKCS#11 keystores
Builder scBuilder = Builder.newInstance("PKCS11", sunpkcs11, new KeyStore.CallbackHandlerProtection(new PasswordRetriever()));
// Create and init KeyManagerFactory
KeyManagerFactory factory = KeyManagerFactory.getInstance("NewSunX509");
factory.init(new KeyStoreBuilderParameters(scBuilder));
// create and init ssl context
m_ssl_context = SSLContext.getInstance("TLS");
m_ssl_context.init(factory.getKeyManagers(), new TrustManager[] {new PkTrustManager()}, null);
SSLContext.setDefault(m_ssl_context);
Run Code Online (Sandbox Code Playgroud)
该PkTrustManager仅仅是和"空"类,服用任何服务器/客户端证书为好,并PasswordRetriever刚刚经历一个对话框,询问密码(要求我发布这些源代码).在Java 7上,我在ssl上下文的SSL握手期间得到以下异常:
java.security.InvalidKeyException: …Run Code Online (Sandbox Code Playgroud) 我们开发了一个带有微控制器的原型板,它可以与SmartCard通信(它可以读取ATR,发出和读取对APDU命令的响应等).现在我想将这个硬件与Android手机或平板电脑一起使用.我们的电路板具有USB连接,通过它我们可以通过Android读取和写入MCU.
最终目标是在支持PKCS#11的Android平台上安装功能强大的智能卡读卡器,并为SmartCard读卡器的最终用户提供库,以便他们可以与卡进行通信.
我已经阅读了几个关于这个主题的讨论,其中一些讨论说我必须构建一个自定义Android才能做到这一点.我不熟悉Android架构,了解为什么当我可以通过USB与外围设备(读卡器)通信时,我必须重新构建Android.在我看来,如果我提供一个实现类似CCID接口的库,用户可以通过将我的库集成到他们的目标.apk文件,使用Android USB堆栈与我的阅读器进行通信.
我们不知道上述计划有什么问题吗?我担心我们缺少一些关于Android或SmartCard读卡器的基本信息(例如:安全性),这会在我们开始实施上述库时给我们带来问题.
我正在使用 Windows Server 2008 R2,它运行一个在本地使用智能卡的 VB6.0 应用程序。
然后我使用远程桌面连接 (6.3) 远程连接到这台机器。但是现在应用程序显示以下错误(智能卡):
0x8010001d 智能卡资源管理器未运行。
迄今为止的研究——
为什么智能卡不被识别?
任何信息,将不胜感激。
注意:当应用程序在 Windows Server 2008 R2 上时,智能卡工作正常 - 但是只有在远程连接时才会失败。
这个问题是双重的,但希望回答起来不会太长,尽管它本身很长。不过,请随意回答其中的一部分,很抱歉使它如此详尽!
对于第一部分,问题适用于:
AppletAppletApplet)makeTransientObjectArraymakeTransientObjectArray(例如,存储在 a 中存储的对象的成员变量中makeTransientObjectArray)对于第二部分,它的适用取决于第一个问题的答案。例如:
new Object当放入瞬态对象数组时,它是持久化的还是非持久化的?先感谢您!
我已经研究了 JCRE 规范 v2.2.2 (我正在使用的版本),但其中有一些不清楚的地方(因此这个问题很详尽,因为我觉得这更适合 Q/A 风格论坛):
Applet. 然而,Glossary-7 指出对象默认是持久的。这种差异可能看起来不可观察,但无论如何都会影响卡电源循环时是否需要进行垃圾收集。Applet.这三个问题分别相当于:
我正在尝试使用请求库连接到需要提供客户端证书的服务器。我可以获得证书,但不能获得私钥。
我能够从智能卡中提取证书(使用加密库加载通过 pkcs11 访问的 x509 证书),并且我能够以请求期望的 PEM 格式序列化这些证书。pkcs11 还提供对卡上私钥的访问;我可以使用它们来执行签名或解密等操作。但是,由于它们被标记为不可导出(这是有道理的,毕竟它们是私钥),因此我无法将它们序列化为文件以在创建 SSL 上下文时提供。
我已经看到用 Java 编写的这个问题的解决方案,其中访问卡上的密钥库/密钥管理器,并且密钥以这种方式与上下文相关联,但我还没有找到一种在 Python 中这样做的方法。
编辑:这是在 Windows 机器上完成的。我也尝试过使用 M2Crypto 库,但是我无法成功安装该库(即使使用 M2CryptoWin64)。
import pkcs11
from pkcs11.constants import ObjectClass
from pkcs11.mechanisms import KeyType, Mechanism
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.serialization import Encoding
lib = pkcs11.lib("path/to/pkcs11/dll")
slots = lib.get_slots(token_present=True)
token = slots[0].get_token()
with token.open(rw=True, user_pin="1234") as session:
attrs = {
pkcs11.Attribute.CLASS: ObjectClass.CERTIFICATE
}
certs = tuple(session.get_objects(attrs))
x509cert = x509.load_der_x509_certificate(certs[0][pkcs11.Attribute.VALUE], default_backend())
with open("cert_file", 'wb') as certfile:
certfile.write(x509cert.public_bytes(Encoding.PEM))
r = …Run Code Online (Sandbox Code Playgroud)