Tag: javacard

APDU读取文件java卡程序

我用netbeans制作了java卡经典applet 当我编程读取操作时,我检查APDU中的第一个字节是0x80然后第二个是0xB0然后从字节2和3获取我将从文件中读取的偏移量然后取字节数为从字节4读取 将APDU作为默认值 0x80 0xB0 0x00 0x03 0x60这从当前文件读取60个字节,以偏移号3开始 当我尝试这个命令时它返回错误Input data length != Lc around line 12 。 经过一些重试,我发现了问题 问题是编译器假设字节4是数据的长度,所以在我的命令中他等待60个字节 当我搜索时,我发现当INS=B0时,字节4并不意味着发送数据长度 我不知道为什么它这样做,当我尝试调试编译器时甚至没有进入过程函数。 我的脚本文件是 0x00 0xA4 0x04 0x00 0X06 0X87 0XF1 0X3F 0X5E 0X22 0X47 0x7F; 0x80 0xA4 0x00 0x00 0x02 0x3F 0x00 0x7F; 0x80 0xA4 0x00 0x00 0x02 0x50 0x15 0x7F; 0x80 0xA4 0x00 0x00 0x02 […]

连接到模拟器的Java卡失败

我正在尝试测试Java Card小程序以建立与模拟器(如cref)的连接: try { sckClient = new Socket(“localhost”, 9025); InputStream is = sckClient.getInputStream(); OutputStream os = sckClient.getOutputStream(); cad = CadDevice.getCadClientInstance(CadDevice.PROTOCOL_T0, is, os); } catch (Exception e) { System.out.println(“error”); return; } try { cad.powerUp(); } catch (IOException e) { e.printStackTrace(); } catch (CadTransportException e) { System.out.println(“error”); try { sckClient.close(); } catch (IOException e1) { e1.printStackTrace(); } […]

Java Card +相应的APDU中的En- / Decryption输出

我是Java Card的全部主题的新手,并试图查看一些代码示例以便更好地理解。 我在oracle论坛中找到了一个AES使用示例,但是在以下部分遇到了一些问题: private void doAES(APDU apdu) { byte b[] = apdu.getBuffer(); short incomingLength = (short) (apdu.setIncomingAndReceive()); if (incomingLength != 24) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH); //perform encryption and append results in APDU Buffer a[] automatically cipherAES.init(aesKey, Cipher.MODE_ENCRYPT); cipherAES.doFinal(b, (short) dataOffset, incomingLength, a, (short) (dataOffset + 24)); cipherAES.init(aesKey, Cipher.MODE_DECRYPT); cipherAES.doFinal(b, (short) (dataOffset + 24), incomingLength, a, (short) (dataOffset + […]

在Java Card上将byte 转换为short 的快速方法

我想在Java Card上优化SHA-3算法。 我需要一个消耗更少内存的快速算法,这样可以轻松地将byte[]转换为short[] (或short []为byte[] )。 我目前的实现如下: private short[] byteToShort(byte[] b,int len) { short len_conv = (short)(len/2); for ( short x = 0; x < len_conv;x++) { for ( short j = 0 ; j < 2 ; j++) aux[j] = b[2*x+j]; temp_conv[x] = (short)((((short)aux[1]) & 0xFF) | ((((short)(aux[0]) & 0xFF) << 8 ))); } […]

JavaCard中SDA和DDA之间的区别?

我有一个小程序(您可以看一下JavaCard小程序无法使用RSA加密 )。 Applet在构造函数中生成RSA公钥和私钥,并使用APDU命令加密某些​​字节数组。 Applet在文档中使用KeyBuilder.LENGTH_RSA_2048生成公钥和私钥,卡片令人遗憾,JavaCard仅在DDA中支持2048位密钥长度。 所以问题是什么是DDA和SDA。 他们之间的差异? 主要问题是:如何在这种模式下安装(或运行?)applet? 我发现: 更新1 :SDA – 静态数据认证DDA – 动态数据认证

Javacard初学者 – 问题

首先,我想告诉你我是关于javacards的新手。 我正处于编写javacard applet的研究阶段,我有一些问题,令人惊讶的是通过谷歌搜索并不那么容易回答。 我想创建一个Android应用程序,通过NFC触发javacard应用程序。 到目前为止,我已经与IsoDep建立了与卡的连接。 可以说我有一个上限文件。 如何将其安装/放置在实际的javacard上? (我需要一个带PC / SC的读卡器/写卡器吗?你建议哪些) 是否可以使用我的智能手机(通过Android)来安装/安装上限文件? 有没有办法(通过APDU命令)获取有关卡上的内容的信息? 具体来说:卡上的小程序,内存可用。 很大程度上提前得到答案。

从字节数组创建PrivateKey

有没有办法从字节数组生成PrivateKey? 我使用getEncoded()方法得到了这个字节数组,但现在我必须将它转换回PrivateKey。 谢谢,Vuk

使用RSA进行模乘会导致Java Card出错

你好我正在研究一个关于Java Card的项目,它暗示了很多模乘法。 我设法使用RSA密码系统在这个平台上实现模乘,但它似乎适用于某些数字。 public byte[] modMultiply(byte[] x, short xOffset, short xLength, byte[] y, short yOffset, short yLength, short tempOutoffset) { //copy x value to temporary rambuffer Util.arrayCopy(x, xOffset, tempBuffer, tempOutoffset, xLength); // copy the y value to match th size of rsa_object Util.arrayFillNonAtomic(eempromTempBuffer, (short)0, (byte) (Configuration.LENGTH_RSAOBJECT_MODULUS-1),(byte)0x00); Util.arrayCopy(y,yOffset,eempromTempBuffer,(short)(Configuration.LENGTH_RSAOBJECT_MODULUS – yLength),yLength); // x+y if (JBigInteger.add(x,xOffset,xLength, eempromTempBuffer, (short)0,Configuration.LENGTH_MODULUS)) […]

Java Card DES生成器applet输出与online-tools输出不同

编写以下小程序以在APDU数据字段上执行DES加密/解密: package cryptoPack; import javacard.framework.APDU; import javacard.framework.Applet; import javacard.framework.ISO7816; import javacard.framework.ISOException; import javacard.framework.JCSystem; import javacard.framework.Util; import javacard.security.CryptoException; import javacard.security.DESKey; import javacard.security.KeyBuilder; import javacardx.crypto.Cipher; public class CryptoDES extends Applet { // Array for the encryption/decryption key private byte[] TheDES_Key = { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) […]