พื้นที่เก็บข้อมูลนี้มีเครื่องจ่ายการ์ด SK-AD3 Python API API ใช้จุดสิ้นสุดระดับสูงสำหรับส่วนใหญ่ของสิ่งที่ SK-AD3 มีความสามารถ เป็นสิ่งสำคัญที่จะต้องทราบทันทีว่า SK-AD3 ดำเนินการสองชุดที่แตกต่างกัน ชุดแรกของการดำเนินการเป็นคำสั่งดั้งเดิมที่ใช้ในการจัดการส่วนประกอบเชิงกลและเซ็นเซอร์ของอุปกรณ์ (ย้ายการ์ดไปยังกล่องจับภาพอ่านสถานะของสแต็กเกอร์ ฯลฯ ) ชุดการดำเนินงานที่สองเกี่ยวข้องกับการสื่อสารกับการ์ด RFID (ปัจจุบัน API นี้รองรับการสื่อสารด้วยการ์ด Desfire EV1 เท่านั้น) ชุดแรกของการดำเนินงานเกี่ยวข้องกับการสื่อสารแบบอนุกรมกับเครื่องจ่าย ชุดการดำเนินงานที่สองเกี่ยวข้องกับการสื่อสารกับการ์ด RFID ผ่าน การเชื่อมต่อแบบอนุกรมกับเครื่องจ่าย ด้วยเหตุนี้โครงการนี้จึงเปิดเผย API สองรายการหนึ่งรายการสำหรับการดำเนินการ SK-AD3 ขั้นพื้นฐานและอีกหนึ่งรายการสำหรับการดำเนินการ RFID อย่างไรก็ตามเนื่องจากการสื่อสาร RFID นั้นเป็นพร็อกซีผ่านเครื่องจ่ายยา Desfire API จึงต้องอาศัยทรัพยากรที่เป็นส่วนหนึ่งของรหัสเครื่องจ่ายพื้นฐานอย่างเหมาะสม
การนำเข้าโมดูลการสร้างวัตถุเครื่องจ่ายและการใช้มันเพื่อเริ่มต้น SK AD3 นั้นใช้งานง่าย ทุกคำสั่งส่งคืนการตอบกลับที่สามารถใช้เพื่อตรวจสอบสถานะของอุปกรณ์
from SK_AD3_Card_Dispenser import SK_AD3
dispenser = SK_AD3 ( 'COM7' )
response = dispenser . init ()
if response . is_successful ():
print ( response . status ())คำสั่งเชิงกลพื้นฐานเช่นการย้ายการ์ดไปยังตำแหน่งที่กำหนด - เช่นตำแหน่ง "RF" - สามารถออกได้เช่น:
response = dispenser . move_card ( 'RF' )เมื่อการ์ดอยู่ในตำแหน่ง "RF" คุณสามารถเปิดใช้งานการ์ดและเริ่มการสื่อสาร นี่คือตัวอย่างของวิธีที่คุณสามารถเปิดใช้งานการ์ด RFID ประเภท A และรับ UID:
response = dispenser . activate_RF_card ( 'type_a' )
if response . is_successful ():
response = dispenser . get_card_uid ()
uid = response . data [ 'uid' ]
# Do something with uidการดำเนินการ RFID บางอย่างต้องการการตรวจสอบสิทธิ์ SK AD3 ดำเนินการรับรองความถูกต้องภายนอกในระดับบัตรและระดับแอปพลิเคชัน คุณจะต้องตรวจสอบสิทธิ์ตามการตั้งค่าบนการ์ด วัตถุการตอบสนองการตรวจสอบสิทธิ์จะถือคีย์เซสชันที่สร้างขึ้นอย่างสะดวกซึ่งสามารถใช้สำหรับการสื่อสารที่เข้ารหัสและคำสั่ง RFID ที่ละเอียดอ่อน
response = dispenser . aes_authenticate ( SUPER_SECRET_AES_MASTER_KEY )
if response . is_successful ():
session_key = response . data [ 'session_key' ]เมื่อได้รับการรับรองความถูกต้องแล้วแอปพลิเคชันสามารถสร้างได้บนการ์ดโดยใช้ค่าที่ตั้งไว้ล่วงหน้าในตัว:
from SK_AD3_Card_Dispenser . file_objects . application import PermissiveDesfireApplication
my_app = PermissiveDesfireApplication ([ 0xAB , 0xCD , 0xEF ])
dispenser . create_application ( my_app )ไปสำหรับไฟล์เดียวกัน:
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 ) หรือหากคุณมีความต้องการเฉพาะคุณสามารถส่ง APDU ทั่วไปไปยังการ์ด รหัสด้านล่างเทียบเท่ากับรหัสด้านบนยกเว้น send_raw_apdu จะส่งคืนแพ็คเกจคำสั่ง RAW ในรูปแบบของรายการจำนวนเต็มแทนวัตถุ 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)
โครงการนี้ใช้ apdu utils เป็น submodule git โคลนโครงการนี้โดยใช้การตั้งค่าสถานะ ---recurse-submodules เพื่อให้แน่ใจว่า APDU Utils มารวมอยู่ด้วย ต้องติดตั้งโมดูลต่อไปนี้ในสภาพแวดล้อมของคุณด้วย:
วิ่ง
pip install -r requirements.txt
เพื่ออัปเดตการพึ่งพาของคุณ
เอกสารสำหรับการ์ด Desfire EV1 ขึ้นอยู่กับ NDA เช่นนี้ที่เก็บนี้เป็นหนี้การดำรงอยู่ของบุคคลเหล่านั้นที่พยายามย้อนกลับวิศวกรรมการ์ดเหล่านี้สาธารณะ มีการใช้แหล่งข้อมูลต่อไปนี้ในการพัฒนาโครงการนี้: