我有 4 种不同类型的 JavaCard。出于一个奇怪的目的,我编写了以下小程序,以在接收到每个 APDU 命令时返回整个 APDU 缓冲区:
package bufferReturner;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;
public class BufferReturner extends Applet {
private BufferReturner() {
}
public static void install(byte bArray[], short bOffset, byte bLength)
throws ISOException {
new BufferReturner().register();
}
public void process(APDU arg0) throws ISOException {
arg0.setOutgoingAndSend((short)0, (short)256);
}
}
Run Code Online (Sandbox Code Playgroud)
当我向我的卡发送 APDU 命令时,我得到以下结果:
NXP JCOP v2.4.2 r3 卡 - 使用 T=1
OpenSCTool:> OSC.exe -s 00A404000B0102030405060708090101 -s 00000000 -s 00000000020101
Using reader with a card: CASTLES EZ100PU 0
Sending: …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个简单的 Hello world JavaCard 小程序。我正在使用 NetBeans IDE。
我正在关注本教程。
这是我的代码:
package classicapplet1;
import javacard.framework.*;
import java.rmi.Remote;
import javacard.framework.service.Dispatcher;
import javacard.framework.service.RMIService;
import javacard.framework.service.Service;
public class JavaCardApplet extends Applet {
HelloWorld hello;
Dispatcher disp;
Service svc;
public static void install(byte[] bArray, short bOffset, byte bLength) {
new JavaCardApplet();
}
private JavaCardApplet() {
// register();
hello = new HelloWorld();
svc=new RMIService((Remote) hello);
disp = new Dispatcher((short)1);
disp.addService(svc, Dispatcher.PROCESS_COMMAND);
}
public static void install(byte[] buf, short ofs, short len){
(new JavaCardApplet()).register();
}
public void …Run Code Online (Sandbox Code Playgroud) 我只是在阅读 ISO/IEC 7816 第 4 部分标准。不幸的是,它对我来说有些模糊,我希望我能在这里得到答案。
第一个模糊点是关于Data Objects。定义了数据对象构成Simple-TLV或Ber-TLV类别,并对这些类别进行了一些描述。但是什么是数据对象本身?是我们存储在卡上的数据吗?如果是这样,据我所知,我们将数据存储在小程序的不同字段中,我们不考虑它们的任何BER-TLV或Simple-TLV类别!它们只是一系列十六进制数字。
第二个模糊点是关于结构选择部分。它被定义为我们可以通过以下五种不同的方式:
模糊的一点是,据我所知,我唯一可以在卡片上选择的东西是小程序,没有别的。对于小程序,我可以选择默认值(这可以是上述选项的第一种方式,隐式选择)或通过将 SELECT APDU 命令发送到带有 Applet AID 的卡片来选择它(上述任何一种方式都没有提到)。
那么这些结构选择方法是什么呢?
第三个模糊点是EF Structures。定义 EF-s 可以具有以下五种结构:
问题又来了,这些结构是干什么用的?这是数据在内存中存储的方式吗?如果是这样,为什么它们在标准中定义,而它们是关于卡片的内部行为?程序员需要了解它们吗?他/她可以检测/更改他/她的卡使用的EF结构吗?
最后,是否所有符合 ISO 7816-4 的卡都支持上述所有项目(因为我在 ISO 7816-4 中找不到任何提到它们是可选的或其他内容)?
是否所有符合 ISO 7816-4 的卡都需要支持在这部分标准中定义的 APDU 命令?
我已经在java卡中生成了密钥对并返回公钥。我在 android 应用程序中再次生成公钥,然后在 android 中生成 CSR
private byte[] CertReqGeneration() throws Exception
{
if(publickeyobj==null)
return null;
String info = "CN=cn, OU=ou, O=o, C=cn, ST=city";
X500Principal x500 = new X500Principal(info);
X500Name x500name;
x500name= X500Name.getInstance(x500.getEncoded());
CertificationRequestInfo csrInfo = new CertificationRequestInfo(x500name, publickeyobj, new DERSet());
ASN1EncodableVector v = new ASN1EncodableVector();
v.add(csrInfo);
ASN1ObjectIdentifier oid = new ASN1ObjectIdentifier("0.0");
v.add(new DERSequence(oid));
v.add(new DERBitString(new byte[] {}));
byte[] encoded = new DERSequence(v).getEncoded();
byte[] PKCS10= DataSignGeneration(encoded);
byte[] encoded = Base64.encode(PKCS10);
String base64=new String(encoded);
return base64;
}
Run Code Online (Sandbox Code Playgroud)
但是当我想在 ca 中发布它时,我收到错误 asn1 bad …
我想在作为客户端和服务器的两个小程序之间共享具有不同包 AID 的接口。我看到了链接:[ 0x6f00 errorcasting Javacard Shareable Interface
在上面的链接中说:客户端和服务器必须位于同一个包中。我现在有一个问题。如果客户端有不同的包 AID,是否可以使用服务器功能?非常感谢。
如何转换这些 192-ECDSA 曲线参数以在 Java Card 中使用?
p = 6277101735386680763835789423207666416083908700390324961279
n = 6277101735386680763835789423176059013767194773182842284081
SEED = 3045ae6f c8422f64 ed579528 d38120ea e12196d5
c = 3099d2bb bfcb2538 542dcd5f b078b6ef 5f3d6fe2 c745de65
b = 64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1
Gx = 188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012
Gy = 07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811
Run Code Online (Sandbox Code Playgroud) 通过 APDU 发送 JavaCard RSAPublicKey 的好解决方案是什么?获取指数和模块并将它们打包成字节数组?
我想从卡向主机发送一个长响应(1000+ 字节)。读者只有T=0。我有几个问题想知道是否有人知道:
祝一切顺利!
约翰尼
我正在尝试通过两个小程序之间的 Java 卡中的可共享接口访问对象。
服务器小程序代码:
package Wallet;
public class Wallet extends Applet implements IShareable {
public static byte[] buf1 = JCSystem.makeTransientByteArray((short) 258, JCSystem.CLEAR_ON_DESELECT);
public static void install(byte[] bArray, short bOffset, byte bLength) {
new Wallet();
}
protected Wallet() {
register();
}
public Shareable getShareableInterfaceObject(AID clientAID, byte parameter) {
return this;
}
public short getArray(byte[] buf, short off, short len) {
Util.arrayCopyNonAtomic(testArray, (short)0, buf, off, (short) 5);
Util.arrayFillNonAtomic(buf1, (short) 0, (short) buf1.length, (byte) 0xAA); // <---- This is causing SecurityException
return len; …Run Code Online (Sandbox Code Playgroud) 我把我的java卡的ISD状态设置为SECURED状态.我想知道与OP_READY相比,这种新状态卡丢失的能力是什么?
注意:当我尝试时,我可以在卡上上传并安装新的.cap文件并成功删除它们[在这个新的ISD状态]!
如果有人解释不同状态之间的主要差异,我会感恩的吗?我已经阅读了全球平台规范2.2.2,但不幸的是我有点难以理解!
javacard ×10
smartcard ×5
apdu ×3
cryptography ×2
android ×1
applet ×1
bouncycastle ×1
csr ×1
ecdsa ×1
netbeans-8 ×1
rsa ×1