我只是想看看我是否能在这方面得到一些帮助,我只用了两周的时间就开始使用javacard,并且说它的乐趣!哈哈,但是认真。这是我在函数中调用的部分代码,它的真正简单之处是,我有一些随机生成的数据,并将其中一个数组加密到apdu中,以作为响应发送回去,其他命令也像mem一样工作正常方法,但始终失败。
private void initi(APDU apdu){
byte[] buf = apdu.getBuffer();
cdataoffset = (short)buf[ISO7816.OFFSET_CDATA];
len = Util.getShort(buf, cdataoffset);
try{
rd.generateData(tempbuf, (short) 0, (short) 32);
rd.generateData(serial, (short) 0, (short) 16);
rd.generateData(salt, (short) 0, (short) 6);
}
catch(CryptoException e){
ISOException.throwIt((short)(0x6900 | e.getReason()));
}
try{
privKey.setKey(tempbuf, (short) 0);
}
catch(ArrayIndexOutOfBoundsException e){}
catch(NullPointerException e){}
try{
cipherPriv.init(privKey, Cipher.MODE_ENCRYPT);
}
catch(CryptoException e){
ISOException.throwIt((short)(0x6900 | e.getReason()));
}
try{
cipherPriv.doFinal(serial, (short) 0, (short) 30, buf, cdataoffset);
}
catch(CryptoException e){
ISOException.throwIt((short)(0x6900 | e.getReason()));
}
apdu.setOutgoingAndSend((short) 0, len);
private void mem(APDU apdu){
byte[] buf = apdu.getBuffer();
short availableNVM = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_PERSISTENT);
short availableVM = JCSystem.getAvailableMemory(JCSystem.MEMORY_TYPE_TRANSIENT_DESELECT);
Util.setShort(buf, (short) 0, availableNVM);
Util.setShort(buf, (short) 2, availableVM);
apdu.setOutgoingAndSend((short) 0, (short) 4);
}
BTW im使用JCOP J3A081卡和马丁提供的gppro / antbuilder进行构建/安装
卡片上的回复:
A >> T = 1(4 + 0000)B0120000 A <<(0000 + 2)(89ms)6901 SCardDisconnect(“ Identiv SCR3500 A Contact Reader”,true)
我的另一种理论是,我实际上收到了我的异常抛出加一个值,但我没有发现这种可能性,但我真的不确定哈哈
答案 0 :(得分:-1)
更改不同捕获线的值,以使它们都不同,并且我不确定我的理论是正确的。这是我的例外,通过更改短值(即6900、6800、6700),我设法发现了哪一部分给我带来了麻烦!