Java智能卡/Java Card 编程SW=6F00问题,毕设卡住了急求答案!

二八 2019-04-15 07:48:36
最近参考《 Java 智能卡原理与应用开发》学习Javacard编程,在使用身份认证与数字签名相关函数时遇到了问题。我将书上示例代码在eclipse中复现,但程序无法正常运行,返回的SW代码为0x6f00。我的编程环境和程序框架没有问题。

我的开发环境是 eclipse IDE+jdk1.8+jcdk3.1.0(环境是按照官方最新文档搭建的,可以正常运行sample应用)
我的代码如下:

package card1;

import javacard.framework.*;
import javacard.security.*;
import javacardx.annotations.*;
//import static card1.card1Strings.*;

/**
* Applet class
*
* @author <user>
*/
@StringPool(value = {
@StringDef(name = "Package", value = "card1"),
@StringDef(name = "AppletName", value = "card1")},
// Insert your strings here
name = "card1Strings")
public class card1 extends Applet {
final static byte Card_CLA =(byte)0x80;

final static byte RANDOM =(byte)0x30;

byte[] Random;

public static void install(byte[] bArray, short bOffset, byte bLength) {
new card1();
}


protected card1() {

register();
}

@Override
public void process(APDU apdu) throws ISOException {
//Insert your code here
byte[] buffer=apdu.getBuffer();
apdu.setIncomingAndReceive();
if(apdu.isISOInterindustryCLA()) {
if(buffer[ISO7816.OFFSET_INS]==(byte)(0xa4)) {
return;
}
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
switch(buffer[ISO7816.OFFSET_INS]) {

//随机数生成0x30
case RANDOM :

if(Random==null) Random=JCSystem.makeTransientByteArray((short)8, JCSystem.CLEAR_ON_DESELECT);
//ISOException.throwIt(ISO7816.SW_CORRECT_LENGTH_00);//自设断点,.此语句在这一行时运行结果能返回0x6c00,但再往下挪一行SW码就变成0x6f00
RandomData data=RandomData.getInstance((byte)RandomData.ALG_PSEUDO_RANDOM);
data.setSeed(Random, (short)0, (short)8);//seed
data.generateData(Random, (short)0, (short)8);
Util.arrayCopyNonAtomic(Random, (short)0, buffer, (short)0, (short)8);
apdu.setOutgoingAndSend((short)0, (short)8);
break;
……
}
}


返回结果:

//randomdata
0x80 0x30 0x00 0x00 0x00 0x7f;//C-APDU
APDU|CLA: 80, INS: 30, P1: 00, P2: 00, Lc: 00, Le: 00, SW1: 6f, SW2: 00


通过自己在程序中逐句添加ISOException返回错误信息,我发现RandomData data=RandomData.getInstance((byte)RandomData.ALG_PSEUDO_RANDOM)这里出现了错误,此函数是导致返回0x6f00错误的原因。我尝试过将algorithm参数替换为当前版本推荐使用的其他参数,结果仍然相同。我不知道该如何解决这个问题。

另外,我在使用KeyPair类的密钥对生成函数时也遇到同样的问题。
...全文
296 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧