首先,我想明确指出我是一名java程序员,但现在我必须在Visual Studio 2010 Express中移动一段时间进行C#编程,以构建一个读写smardcard(sle4428)的程序.我有几个问题.
1)我在这个url中看到了一些关于winscard.dll api的文档,但是在函数的签名中,没有参数的数据类型,只有in或out.(Doh)存在一种解决我必须使用哪种类型的方法?
2)存在一些代码示例,说明如何初始化通信,而无需在"谷歌搜索代码"中搜索
3)客户向我提供了基本的VB代码,我可以构建一些可以在C#上下文中使用的东西吗?
Thnaks伙伴们帮忙!!!!
我正在使用智能卡来验证用户身份.我有一个身份验证服务(SecurityTokenService),它处理服务器上的身份验证逻辑.
我正在使用X509Certificate2.Verify()来验证证书.由于此API可以通过联机并联系证书颁发机构(CA)来检查证书是否有效/已撤销,我是否需要服务器上的根证书?
我们可以避免在本地计算机上拥有根证书吗?或根证书总是强制性的?
我的应用程序正在访问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*..)
Run Code Online (Sandbox Code Playgroud)
以下是我的代码: -
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";
Run Code Online (Sandbox Code Playgroud)
错误发生的代码片段如下: -
private byte[] decryptSecretKeyData(byte[] encryptedSecretKey, byte[] iv, PrivateKey privateKey) throws Exception {
try {
Cipher rsaCipher = Cipher.getInstance(TRANSFORMATION, SECURITY_PROVIDER);
System.out.println("Cipher block initialized"); - **Printed**
PSource pSrc = (new PSource.PSpecified(iv));
System.out.println("PSource inisitialized"); …Run Code Online (Sandbox Code Playgroud) 我一直在浏览JavaCard API和示例,找不到对更高级别数据集合(如List,ArrayList,HashMaps等)的任何引用?
我想念什么吗?
我知道JavaCard环境的资源非常有限,并且JVM必须尽可能小,但是缺少某种形式的易于使用的数据收集对象会使过程变得很手工。
问题:假设有一个Applet的多个实例.目前选择了一个Applet实例.是否可以将任何APDU命令从选定的Applet传递到另一个Applet实例?我在JavaCard API 3.0.4版中没有找到这样的方法.
详细信息:在研究文档"Expresspay Mobile Specifications v1.2"以实现"应用程序选择"服务时,我陷入了以下5.3.6节.由于该文件不是开源的,我引用了选择性部分:
"如果使用部分AID通过无接触界面选择Expresspay移动应用程序,则它应将SELECT命令和后续命令传递给激活的Expresspay移动应用程序实例(可能是也可能不是正在选择的应用程序)."
它声明我需要将SELECT命令从当前选定的applet传递到另一个applet(已激活!).但我没有在JavaCard API中找到任何可以将任何命令从一个applet传递到另一个applet的东西.我搜索在Oracle社区,发现这个没有回复!
编辑:假设applet A有三个实例A1,A2,A3.Applet A有一个可共享的标志对象 flag,包含AID为"active"实例,比如AID为A2.(假设flag可以预先初始化).当前选择实例A1.现在终端发送任何APDU命令,该命令将到达实例A1.A1将检查flag并找出flag包含A2的AID.因此,A1会将APDU命令传递给A2进行进一步处理.我的问题是A1实例如何向A2实例发送任何APDU命令?
我正在使用通过USB连接的ACS ACR1252U读卡器(http://www.acs.com.hk/en/products/342/acr1252u-usb-nfc-reader-iii-nfc-forum-certified-reader/)说实话,我不知道如何让它工作.我用谷歌搜索了很多东西,但没有运气.我正在使用Debian的变种.以下是我所做的或多或少:
我使用dmesg得到以下内容:
[ 7173.059710] usb 1-1.3: new full-speed USB device number 6 using dwc_otg
[ 7173.160500] usb 1-1.3: not running at top speed; connect to a high speed hub
[ 7173.163114] usb 1-1.3: New USB device found, idVendor=072f, idProduct=223b
[ 7173.163147] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 7173.163168] usb 1-1.3: Product: ACR1252 Dual Reader
[ 7173.163186] usb 1-1.3: Manufacturer: ACS
Run Code Online (Sandbox Code Playgroud)
我使用以下Python代码来获取有关设备的更多详细信息:
#!/usr/bin/python
import sys
import usb.core
# find USB devices
dev = usb.core.find(find_all=True) …Run Code Online (Sandbox Code Playgroud) 当主机向卡发送APDU命令(如读取命令)时,是否还有另一个命令,主机可以在执行第一个命令时发送该命令以取消先前(正在进行的)命令执行?
例如,这里Command_2被Command_3中断:
Host <---> Card
----------------------------------------------------------
Command_1 ---> \
| Processing Command_1
<--- Response_1 /
Command_2 ---> \
| Processing Command_2
|
Command_3 ---> x Processing interrupted
<--- Response_3 /
尝试使用以下命令列出智能卡的内容时
gp -l
Run Code Online (Sandbox Code Playgroud)
获得以下异常:
pro.javacard.gp.GPException: STRICT WARNING: Unfused JCOP detected
at pro.javacard.gp.GlobalPlatform.printStrictWarning(GlobalPlatform.java:184)
at pro.javacard.gp.GlobalPlatform.select(GlobalPlatform.java:213)
at pro.javacard.gp.GPTool.main(GPTool.java:334)
Run Code Online (Sandbox Code Playgroud)
搜索时,我知道该卡不是预先个性化的.我的问题是什么是智能卡预个性化?这种预先预先定位的人是谁?它是供应商吗?
在EMV第2册:安全和密钥管理(第151页)中,有人说
"该计数器使密码(ARQC)具有唯一性,并为主机验证服务提供跟踪值,允许识别重放的交易和克隆卡."
如果发行人依赖ARQC的收单机构(终端发送会话UN的nonce)那么ATC的目的是什么?"允许重播交易"是什么意思?谁重播ARQC?
我正在运行M-TIP MP92测试01方案01。测试的目的是:
“为了确保终端在卡指示不支持非接触式M / Chip时终止交易”。
我不明白的是,卡片是如何表明这一点的。我现在的终端正在处理“ 获取处理选项”步骤之后的步骤,这导致我的测试工具失败。到目前为止,我已经查看了卡和工具之间交换的数据,但我不知道这是什么。
Select (2PAY.SYS.DDF01)
Request : 00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00
Class :00
Ins :A4
P1 :04
P2 :00
Lc :0E
Data :32 50 41 59 2E 53 59 53 2E 44 44 46 30 31
Application: 2PAY.SYS.DDF01
Le :00
Response: 6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 …Run Code Online (Sandbox Code Playgroud) smartcard ×10
javacard ×4
apdu ×2
emv ×2
nfc ×2
.net ×1
bouncycastle ×1
c# ×1
certificate ×1
cryptography ×1
dll ×1
encryption ×1
java ×1
jcop ×1
linux ×1
mastercard ×1
pkcs#11 ×1
python ×1
replay ×1
testing ×1
usb ×1