Java Card

Java Card merupakan teknologi yang membolehkan aplikasi berasaskan Java dijalankan dengan selamat pada kad-kad pintar dan peranti-peranti kecil yang beringatan kecil. Java Card adalah pelantar Java terkecil yang dibangunkan untuk peranti-peranti terbenam. Ia membolehkan penggunanya mengatur cara peranti-perantinya serta mengkhususkan aplikasi.

Java Card yang pertama telah diperkenalkan pada tahun 1996 oleh bahagian kad Schlumberger yang kemudiannya bergabung dengan Gemplus bagi membentuk Gemalto. Produk-produk Java Card adalah berasaskan spesifikasi yang dibangunkan oleh Sun Microsystems (yang kemudiannya menjadi anak syarikat Oracle Corporation). Kebanyakan produk-produk Java card turut bergantung kepada spesifikasi GlobalPlatform bagi pengurusan keselamatan aplikasi pada kad (muat turun, pemasangan, pemperibadian, penghapusan).

Matlamat utama reka bentuk teknologi Java Card ialah kemudahalihan dan keselamatan.

Versi

Java Card 2.2.2 
Java Card 2.2.2 dikeluarkan pada Mac 2006. Keluaran ini menyediakan beberapa ciri-ciri baharu, antaranya:
 sokongan bagi ISO7816-4:2005 dan 20 saluran logik
 bantuan-bantuan kebolehaturcaraan applet untuk APDU panjang tambahan yang diterangkan dalam ISO 7816
 sokongan bagi algoritma cincangan untuk SHA-256, SHA-384, SHA-512.

Java Card 3.0 
Tentuan Java Card versi 3.0 (drafnya dikeluarkan pada bulan Mac 2008) dibahagikan kepada dua versi iaitu Classic Edition (edisi klasik) dan Connected Edition (edisi tersambung). 

Antara ciri baharu dalam Connected Edition ialah sokongan bagi servlet, sokongan bagi rentetan (string) dan shareable interface object (objek antara muka boleh kongsi, SIO).

Java Card 3.0 Classic Edition adalah serasi kebelakang dengan Java Card 2.22.

Contoh 
Berikut ialah contoh ringkas bagi aplikasi yang digunakan sebagai dompet elektronik:

public class DompetApplet extends Applet {
    private final byte PENGESAHAN = (byte)0x20;
    private final byte MASUK_DUIT = (byte)0x6a;
    private final byte KELUAR_DUIT = (byte)0x6b;
    private final short MAKSIMUM_KELUAR = (short)0x0bb8; // RM300
    private short baki;
    private OwnerPIN pin;
 
    public static void install(byte[] bArray, short bOffset, byte bLength) {
        new DompetApplet(bArray, bOffset, bLength);
    }
 
    protected DompetApplet(byte[] bArray, short bOffset, byte bLength) {
        register();
        pin.update(bArray, bOffset, bLength);
        baki = (short)0;
    }
 
    @Override
    public void process(APDU apdu) {
        byte[] buffer = apdu.getBuffer();
        short lc = apdu.getIncomingLength();
        short duit;
 
        if (!selectingApplet()) {
            switch (buffer[ISO7816.OFFSET_INS]) {
                case PENGESAHAN:
                     if (pin.getTriesRemaining() != 0) {
                         pin.check(buffer, ISO7816.OFFSET_CDATA, (byte)lc);
                     }
                     break;
                case MASUK_DUIT:
                     if (pin.isValidated()) {
                         duit = Util.getShort(buffer, ISO7816.OFFSET_CDATA);
                         baki += duit;
                     }
                     break;
                case KELUAR_DUIT:
                     if (pin.isValidated()) {
                         duit = Util.getShort(buffer, ISO7816.OFFSET_CDATA);
                         if ((baki - duit) > 0 && duit <= MAKSIMUM_KELUAR) {
                             baki -= duit;
                         } else {
                             ISOException.throwIt(ISO7816.SW_WRONG_DATA);
                         }
                     }
                     break;
                default:
                     ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
            }
        }
    }
}

Rujukan 

Pelantar peranti Java
Kad pintar