Repositori ini berisi API Python Dispenser Kartu SK-AD3. API mengimplementasikan titik akhir tingkat tinggi untuk sebagian besar dari apa yang mampu SK-AD3. Penting untuk dicatat langsung bahwa SK-AD3 melakukan dua set operasi yang berbeda. Set operasi pertama adalah perintah asli yang digunakan untuk memanipulasi komponen mekanis dan sensor perangkat (memindahkan kartu ke kotak penangkapan, membaca keadaan penumpukan, dll.). Rangkaian operasi kedua berkaitan dengan komunikasi dengan kartu RFID (API ini saat ini hanya mendukung komunikasi dengan kartu Desfire EV1). Set operasi pertama melibatkan komunikasi serial dengan dispenser. Rangkaian operasi kedua melibatkan komunikasi dengan kartu RFID melalui koneksi serial ke dispenser. Dengan demikian, proyek ini memaparkan dua API, satu untuk operasi SK-AD3 dasar, dan satu untuk operasi RFID. Namun, karena komunikasi RFID diproksi melalui dispenser, API Desfire bergantung pada sumber daya yang merupakan bagian dari kode dispenser dasar.
Mengimpor modul, membuat objek dispenser, dan menggunakannya untuk menginisialisasi SK AD3 cukup intuitif. Setiap perintah mengembalikan respons yang dapat digunakan untuk memeriksa keadaan perangkat.
from SK_AD3_Card_Dispenser import SK_AD3
dispenser = SK_AD3 ( 'COM7' )
response = dispenser . init ()
if response . is_successful ():
print ( response . status ())Perintah mekanik dasar seperti memindahkan kartu ke posisi tertentu - seperti posisi "RF" - dapat dikeluarkan seperti itu:
response = dispenser . move_card ( 'RF' )Setelah kartu berada dalam posisi "RF", Anda dapat mengaktifkan kartu dan memulai komunikasi. Ini adalah contoh bagaimana Anda dapat mengaktifkan kartu RFID Tipe A dan mendapatkan UID -nya:
response = dispenser . activate_RF_card ( 'type_a' )
if response . is_successful ():
response = dispenser . get_card_uid ()
uid = response . data [ 'uid' ]
# Do something with uidOperasi RFID tertentu membutuhkan otentikasi. SK AD3 melakukan otentikasi eksternal pada tingkat kartu dan tingkat aplikasi. Anda perlu mengotentikasi sesuai dengan pengaturan pada kartu. Objek respons otentikasi akan dengan mudah menahan kunci sesi yang dihasilkan, yang dapat digunakan untuk komunikasi terenkripsi dan perintah RFID yang sensitif.
response = dispenser . aes_authenticate ( SUPER_SECRET_AES_MASTER_KEY )
if response . is_successful ():
session_key = response . data [ 'session_key' ]Setelah diautentikasi dengan benar, aplikasi dapat dibuat pada kartu dengan menggunakan preset bawaan:
from SK_AD3_Card_Dispenser . file_objects . application import PermissiveDesfireApplication
my_app = PermissiveDesfireApplication ([ 0xAB , 0xCD , 0xEF ])
dispenser . create_application ( my_app )Hal yang sama berlaku untuk file:
from SK_AD3_Card_Dispenser . file_objects . file import PermissiveStandardDataFile
my_file = PermissiveStandardDataFile ([ 0x00 ])
dispenser . select_application ([ 0xAB , 0xCD , 0xEF ])
dispenser . create_standard_data_file ( my_file ) Atau, jika Anda memiliki kebutuhan spesifik, Anda dapat mengirim APDU generik ke kartu. Kode di bawah ini setara dengan kode di atas, kecuali send_raw_apdu akan mengembalikan paket perintah mentah dalam bentuk daftar bilangan bulat alih -alih objek Response :
dispenser . send_raw_apdu ([ 0x90 , 0x5A , 0x00 , 0x00 , 0x03 , 0xAB , 0xCD , 0xEF , 0x00 ])
dispenser . send_raw_apdu ([ 0x90 , 0xCD , 0x00 , 0x00 , 0x07 , 0x00 , 0x00 , 0xEE , 0xEE , 0x10 , 0x00 , 0x00 , 0x00 ])Python 3 (v3.11 direkomendasikan).
Proyek ini menggunakan util APDU sebagai submodule git. Klon proyek ini menggunakan bendera ---recurse-submodules untuk memastikan bahwa util APDU sudah termasuk. Modul berikut juga perlu diinstal di lingkungan Anda:
berlari
pip install -r requirements.txt
untuk memperbarui dependensi Anda.
Dokumentasi untuk kartu Desfire EV1 tunduk pada NDA. Dengan demikian, repositori ini berutang keberadaannya kepada orang -orang yang telah melakukan upaya mereka merekayasa kartu -kartu ini publik. Sumber -sumber berikut digunakan dalam pengembangan proyek ini: