下面是DES加密代码。我收到错误0x6999:“小程序选择失败”。
package JCardDES;
import javacard.framework.*;
import javacard.security.*;
import javacardx.crypto.*;
public class JCard_DES extends Applet
{
// globals
DESKey deskey;
Cipher cipherCBC;
final short dataOffset = (short) ISO7816.OFFSET_CDATA;
static byte[] TrippleDESKey = {(byte) 0x38, (byte) 0x12, (byte) 0xA4,
(byte) 0x19, (byte) 0xC6, (byte) 0x3B, (byte) 0xE7, (byte) 0x71, (byte) 0x00, (byte) 0x12, (byte) 0x00,
(byte) 0x19, (byte) 0x80, (byte) 0x3B, (byte) 0xE7, (byte) 0x71, (byte) 0x01, (byte) 0x12, (byte) 0x01,
(byte) 0x01, (byte) 0x01, (byte) 0x03, (byte) 0xE7, (byte) 0x71};
// constructor,
// initialization
private JCard_DES(byte bArray[], short bOffset, byte bLength)
{
try {
deskey = (DESKey) KeyBuilder.buildKey(KeyBuilder.TYPE_DES, KeyBuilder.LENGTH_DES3_3KEY, false);
cipherCBC = Cipher.getInstance(Cipher.ALG_DES_CBC_NOPAD, false);
}
catch (CryptoException e) {
ISOException.throwIt((short) ((short) 0x9000 + e.getReason()));
}
if (bArray[bOffset] == 0)
{
register();
}
else
{
register(bArray, (short)(bOffset+1), bArray[bOffset]);
}
}
// install
public static void install(byte bArray[], short bOffset, byte bLength)
{
new JCard_DES(bArray, bOffset, bLength);
}
public void process(APDU apdu)
{
byte[] buf = apdu.getBuffer();
if (selectingApplet())
{
return;
}
doTrippeDES(apdu);
}
// DES encryption
private void doTrippeDES(APDU apdu)
{
byte a[] = apdu.getBuffer();
short incomingLength = (short) (apdu.setIncomingAndReceive());
if (incomingLength != 24) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
deskey.setKey(TrippleDESKey, (short)0);
cipherCBC.init(deskey, Cipher.MODE_ENCRYPT,new byte[]{0,0,0,0,0,0,0,0},(short)0,(short)8);
cipherCBC.doFinal(a, (short) dataOffset, incomingLength, a, (short) (dataOffset + 24));
cipherCBC.init(deskey, Cipher.MODE_DECRYPT,new byte[]{0,0,0,0,0,0,0,0},(short)0,(short)8);
cipherCBC.doFinal(a, (short) (dataOffset + 24), incomingLength, a, (short) (dataOffset + 48));
// send results
apdu.setOutgoing();
apdu.setOutgoingLength((short) 72);
apdu.sendBytesLong(a, (short) dataOffset, (short) 72);
}
}
那就奇怪了,因为没有try/get块中的初始化代码,选择小程序是没有问题的。
我的脚本文件(APDU脚本)是
powerup;
// Select JCard_DES
0x00 0xA4 0x04 0x00 0X06 0XFC 0X74 0X41 0XA1 0X9B 0X63 0x7F;
请指导我哪里出了问题,因为我是新来的Java卡编程
谢谢
错误代码0x6999表示小程序选择失败。要确定你辅助的正确性和唯一性。注意里面的规则有时选择辅助时会自动出现概念完成。
您的命令长度(Lc)不正确。它应该是0x07
,而不是0x06
。
0x00 0xA4 0x04 0x00 0X07 0XFC 0X74 0X41 0XA1 0X9B 0X63 0x7F
问题内容: 我正在编写一个Java程序,并且在程序的某些部分中使用了JTextpane。在此JTextpane中,我使用制表符(\ t)来创建列,例如: 我可以在标签(\ t)距离处看到列中的值。制表符距离始终相同,我想更改此距离以改善外观。 您知道如何更改JTextPane中的制表符(\ t)大小吗? 提前致谢。 问题答案:
我在让我的排序检查每个索引时遇到问题。它跳过了的第三个索引,因为它去了,,到,我不知道它为什么这样做?。此外,我的数字实际上被交换时遇到了问题。有人知道我的错误在哪里吗?
预期:[硬币[价值=1.0,名称=美元],硬币[价值=0.25,名称=四分之一],硬币[价值=0.1,名称=一角硬币],硬币[价值=0.05,名称=镍],硬币[价值=0.01,名称=便士]]
虽然NatTable已经有一个类RowSelectionProvider,但是我的数据是通过单元格而不是行提供的,所以我不能使用这个类。是否可能创建一个类CellSelectionProvider,或者它会太难? 我要做的是在NatTable中选择一个单元格,它链接到一个eObject。然后在编辑器中选择EObject,并在properties视图中显示其属性。第一部分我能做,但第二部分不行。 我
特征选择试图识别相关的特征用于模型构建。它改变特征空间的大小,它可以提高速度以及统计学习行为。ChiSqSelector实现卡方特征选择,它操作于带有类别特征的标注数据。 ChiSqSelector根据独立的卡方测试对特征进行排序,然后选择排序最高的特征。下面是一个使用的例子。 import org.apache.spark.SparkContext._ import org.apache.s
本文向大家介绍微信小程序仿美团城市选择,包括了微信小程序仿美团城市选择的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了微信小程序城市选择器,供大家参考,具体内容如下 代码很简单. demo下载地址 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。