- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我刚刚创建了一个非常简单的小程序。它是 Java 卡技术中的“hello world”。我在下面粘贴了一段代码。
public class helloworld extends Applet {
private byte[] echoBytes;
private static final short LENGTH_ECHO_BYTES = 256;
/**
* Installs this applet.
*
* @param bArray
* the array containing installation parameters
* @param bOffset
* the starting offset in bArray
* @param bLength
* the length in bytes of the parameter data in bArray
*/
public static void install(byte[] bArray, short bOffset, byte bLength) {
new helloworld();
}
/**
* Only this class's install method should create the applet object.
*/
protected helloworld() {
echoBytes = new byte[LENGTH_ECHO_BYTES];
register();
}
/**
* Processes an incoming APDU.
*
* @see APDU
* @param apdu
* the incoming APDU
*/
@Override
public void process(APDU apdu) {
//Insert your code here
//
byte buffer[] = apdu.getBuffer();
if ((buffer[ISO7816.OFFSET_CLA] == 0) && (buffer[ISO7816.OFFSET_INS] == (byte) (0xA4))){
return;
}
short bytesRead = apdu.setIncomingAndReceive();
short echoOffset = (short) 0;
Util.arrayCopyNonAtomic(buffer, ISO7816.OFFSET_CDATA, echoBytes, echoOffset, bytesRead);
echoOffset += bytesRead;
apdu.setOutgoing();
apdu.setOutgoingLength((short)(echoOffset + 5));
//echo header
apdu.sendBytes((short) 0, (short) 5);
//echo data
apdu.sendBytesLong(echoBytes, (short) 0, echoOffset);
}
}
之后,我决定使用 Global Platform 将其安装到真实卡 (J3A081) 上,但失败了。首先,我用命令检查卡上是否已经安装了任何小程序:
java -jar gp.jar -l
响应是:
AID: A000000003000000 (|........|)
ISD OP_READY: Security Domain, Card lock, Card terminate, Default selected, CVM (PIN) management
当我决定使用 *.cap 文件安装小程序时,我得到了:
java -jar gp.jar -install krystian.cap
javax.smartcardio.CardException: sun.security.smartcardio.PCSCException: Unknown error 0x1f
at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:219)
at sun.security.smartcardio.ChannelImpl.transmit(ChannelImpl.java:90)
at pro.javacard.gp.GlobalPlatform.transmit(GlobalPlatform.java:661)
at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:727)
at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:686)
at pro.javacard.gp.GPTool.main(GPTool.java:453)
Caused by: sun.security.smartcardio.PCSCException: Unknown error 0x1f
at sun.security.smartcardio.PCSC.SCardTransmit(Native Method)
at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:188)
... 5 more
Exception in thread "main" javax.smartcardio.CardException: sun.security.smartcardio.PCSCException: Unknown error 0x1f
at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:219)
at sun.security.smartcardio.ChannelImpl.transmit(ChannelImpl.java:90)
at pro.javacard.gp.GlobalPlatform.transmit(GlobalPlatform.java:661)
at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:727)
at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:686)
at pro.javacard.gp.GPTool.main(GPTool.java:453)
Caused by: sun.security.smartcardio.PCSCException: Unknown error 0x1f
at sun.security.smartcardio.PCSC.SCardTransmit(Native Method)
at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:188)
... 5 more
你能告诉我我做错了什么吗?这张卡是全新的,以前从未使用过。我正在使用 NXP 的 ACR122U NFC 读卡器和卡 J3A081。
编辑
经过几个小时的尝试,我设法实现了一些目标。首先,我更新了一个ACR122U智能卡读写器的驱动。此外,我熟悉了 GPSshell 并创建了一个简单的脚本:
mode_211
enable_trace
establish_context
card_connect
select -AID a000000003000000
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f
card_disconnect
release_context
哪些输出:
mode_211
enable_trace
establish_context
card_connect
select -AID a000000003000000
Command --> 00A4040008A000000003000000
Wrapped command --> 00A4040008A000000003000000
Response <-- 6F658408A000000003000000A5599F6501FF9F6E06479100783400734A06072A864 886FC6B01600C060A2A864886FC6B02020101630906072A864886FC6B03640B06092A864886FC6B0 40215650B06092B8510864864020103660C060A2B060104012A026E01029000
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4 f -enc_key 404142434445464748494a4b4c4d4e4f
Command --> 80CA006600
Wrapped command --> 80CA006600
Response <-- 664C734A06072A864886FC6B01600C060A2A864886FC6B02020101630906072A864 886FC6B03640B06092A864886FC6B040215650B06092B8510864864020103660C060A2B060104012 A026E01029000
Command --> 805000000853DFBA4B056DAE8800
Wrapped command --> 805000000853DFBA4B056DAE8800
Response <-- 0000510101086197846701020018CC282BD831DB0145313B12DB3E169000
Command --> 84820100103294E6632BFE5E59879A2C9C03EE345E
Wrapped command --> 84820100103294E6632BFE5E59879A2C9C03EE345E
Response <-- 9000
card_disconnect
release_context
所以我想一切正常,但是当我想使用这个安装小程序时:
mode_211
enable_trace
establish_context
card_connect
select -AID a000000003000000
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f
install -file helloworld.cap -nvDataLimit 2000 -instParam 00 -priv 2
card_disconnect
release_context
我有一个异常(exception):
mode_211
enable_trace
establish_context
card_connect
select -AID a000000003000000
Command --> 00A4040008A000000003000000
Wrapped command --> 00A4040008A000000003000000
Response <-- 6F658408A000000003000000A5599F6501FF9F6E06479100783400734A06072A864 886FC6B01600C060A2A864886FC6B02020101630906072A864886FC6B03640B06092A864886FC6B0 40215650B06092B8510864864020103660C060A2B060104012A026E01029000
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4 f -enc_key 404142434445464748494a4b4c4d4e4f
Command --> 80CA006600
Wrapped command --> 80CA006600
Response <-- 664C734A06072A864886FC6B01600C060A2A864886FC6B02020101630906072A864 886FC6B03640B06092A864886FC6B040215650B06092B8510864864020103660C060A2B060104012 A026E01029000
Command --> 8050000008ADBD20501C2C87A400
Wrapped command --> 8050000008ADBD20501C2C87A400
Response <-- 0000510101086197846701020019DFABEED157EA9E2F7E75EAA739E89000
Command --> 848201001014781742A86F6C5026B0D999238ABEBA
Wrapped command --> 848201001014781742A86F6C5026B0D999238ABEBA
Response <-- 9000
install -file helloworld.cap -nvDataLimit 2000 -instParam 00 -priv 2
Command --> 80E602001E07D0D1D2D3D4D50108A000000003000000000AEF08C6020160C80207D0 0000
Wrapped command --> 84E602002607D0D1D2D3D4D50108A000000003000000000AEF08C6020160 C80207D000B9A71938B63B8CFB00
Response <-- 009000
Command --> 80E80000EFC4820157010011DECAFFED010204000107D0D1D2D3D4D50102001F0011 001F000C000B0026000C003B0019000F0000005D00020001000C01010004000B01000107A0000000 62010103000C0108D0D1D2D3D4D50101000C06000C00800300FF0007010000001707003B00011018 8C0000188B00017A02308F00023D8C00033B7A0521198B00042D198B00053B7B0006031A037B0006 928D00073B19037B0006928B00087A08001900020001000103000C48656C6C6F20576F726C642100 00000005002600090680030003800301010000000600000103800A0103800A060500000006801002 03800A0809000F000000
Wrapped command --> 84E80000F7C4820157010011DECAFFED010204000107D0D1D2D3D4D50102 001F0011001F000C000B0026000C003B0019000F0000005D00020001000C01010004000B01000107 A000000062010103000C0108D0D1D2D3D4D50101000C06000C00800300FF0007010000001707003B 000110188C0000188B00017A02308F00023D8C00033B7A0521198B00042D198B00053B7B0006031A 037B0006928D00073B19037B0006928B00087A08001900020001000103000C48656C6C6F20576F72 6C64210000000005002600090680030003800301010000000600000103800A0103800A0605000000 0680100203800A0809000F00000067CDD7B27E70D011
load() returns 0x0000001F (Urzdzenie doczone do komputera nie dziaa.
谁能得到类似的错误?你知道这意味着什么吗?
编辑 2我终于设法在我的卡上安装了小程序。我使用修改过的 GlobalPlatformPro,如 vlp 所写,有必要将加载 block 更改为 16 字节。
但我只能安装 hello world applet,在处理我的过程中,GlobalPlatformPro 返回异常:
java -jar gp_16byteLoadBlock.jar --install inzynierka.cap
pro.javacard.gp.GPException: LOAD failed SW: 6A80
at pro.javacard.gp.GlobalPlatform.check(GlobalPlatform.java:1092)
at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:728)
at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:686)
at pro.javacard.gp.GPTool.main(GPTool.java:453)
最佳答案
(评论中的讨论记录)
事实证明,ACR122U NFC 读卡器存在长 APDU 的问题(也提到了 here)。
一种可能的解决方案是修改 GlobalPlatformPro通过以下方式使用工具:
获取资源 here
在 GlobalPlatform.java:724 找到检索加载文件 block 的代码部分
通过用一些更小的常量替换 wrapper.getBlockSize()
部分来减小加载 block 大小(32
已确认工作并且 64
已确认不适用于此阅读器)
重新编译 GlobalPlatformPro
编辑>
最新的GlobalPlatformPro代码adds -bs
选项,允许您设置 block 大小而无需重新编译。
关于java - 在 J3A081 上安装小程序(Java 卡),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33618618/
在C语言中,当有变量(假设都是int)i小于j时,我们可以用等式 i^=j^=i^=j 交换两个变量的值。例如,令int i = 3,j = 5;在计算 i^=j^=i^=j 之后,我有 i = 5,
我为以下问题编写了以下代码: 给定一个由 N 个正整数组成的序列 A,编写一个程序来查找满足 i > A[j]A[i](A[i] 的 A[j] 次方 > A[j] 的 A[i] 次方)。 我的代码通过
这个表达式是从左到右解析的吗?我试图解释解析的结果,但最后的结果是错误的。 int j=10, k=10; j+=j-=j*=j; //j=j+(j-=j*=j)=j+(j-j*j) k+=k*=
给定一个整数数组 A ,我试图找出在给定位置 j ,A[j] 从每个 i=0 到 i=j 在 A 中出现了多少次。我设计了一个如下所示的解决方案 map CF[400005]; for(int i=0
你能帮我算法吗: 给定 2 个相同大小的数组 a[]和 b[]具有大于或等于 1 的整数。 查找不相等的索引 i和 j ( i != j ) 使得值 -max(a[i]*b[i] + a[i] * b
每次用J的M.副词,性能显着下降。因为我怀疑艾弗森和许比我聪明得多,我一定是做错了什么。 考虑 Collatz conjecture .这里似乎有各种各样的内存机会,但不管我放在哪里M. ,性能太差了
假设一个包含各种类型的盒装矩阵: matrix =: ('abc';'defgh';23),:('foo';'bar';45) matrix +---+-----+--+|abc|defgh|23|+
是否有可能对于两个正整数 i 和 j,(-i)/j 不等于 -(i/j)?我不知道这是否可能......我认为这将是关于位的东西,或者 char 类型的溢出或其他东西,但我找不到它。有什么想法吗? 最
假设两个不同大小的数组: N0 =: i. 50 N1 =: i. 500 应该有一种方法可以获得唯一的对,只需将两者结合起来即可。我发现的“最简单”是: ]$R =: |:,"2 |: (,.N0)
我是 J 的新用户,我只是想知道 J 包中是否实现了三次样条插值方法? 最佳答案 我自己不熟悉,但是我确实安装了所有的包,所以 $ rg -l -i spline /usr/share/j/9.02
在 Q/kdb 中,您可以使用 ': 轻松修改动词,它代表每个优先级。它会将动词应用于一个元素及其之前的邻居。例如 =': 检查值对是否相等。在 J 中,您可以轻松折叠 /\ 但它是累积的,是否有成对
嗨,我有一个 4x4 双矩阵 A 1+2i 2-1i -3-2i -1+4i 3-1i -3+2i 1-3i -1-3i 4+3i 3+5i 1-2i -1-4i
刚刚发现 J 语言,我输入: 1+^o.*0j1 I expected the answer to be 0 ,但我得到了 0j1.22465e_16。虽然这非常接近于 0,但我想知道为什么 J 应该
这个问题在这里已经有了答案: With arrays, why is it the case that a[5] == 5[a]? (20 个答案) 关闭 3 年前。 我正在阅读“C++ 编程语言”
当第一行是 1, 1/2 , 1/3 ....这是支持该问题的图像。 是否存在比朴素的 O(n^2) 方法更有效的方法? 我在研究伯努利数时遇到了这个问题,然后在研究“Akiyama-Tanigawa
我写了一段Java代码,它在无限循环中运行。 下面是代码: public class TestProgram { public static void main(String[] args){
for (int i = n; i > 0; i /= 2) { for (int j = 0; j 0; i /= 2) 的第一个循环结果 O(log N) . 第二个循环for (int
如问题中所述,需要找到数组中 (i,j) 对的总数,使得 (1) **ia[j]** 其中 i 和 j 是数组的索引。没有空间限制。 我的问题是 1) Is there any approach w
for l in range(1,len(S)-1): for i in range(1,len(S)-l): j=i+l for X in N:
第二个for循环的复杂度是多少?会是n-i吗?根据我的理解,第一个 for 循环将执行 n 次,但第二个 for 循环中的索引设置为 i。 //where n is the number elemen
我是一名优秀的程序员,十分优秀!