Как читать данные смарт-карты VISA на основе EMV - PullRequest
14 голосов
/ 28 июня 2011

Я пытаюсь прочитать данные кредитной карты с карты VISA, но не смог добиться успеха. Как и в интернет-ресурсах, я обнаружил, что для карты MASTER мы можем выбрать каталог PSE, используя 1PAY.SYS.DDF01 файл, а затем прочитать записи. Но для VISA это не обязательно, и когда я использую следующий файл с помощью команды SELECT для получения каталога PSE, я получаю ответ как «6A82». Это означает, что он не поддерживается файловой системой. Я искал ошибку в EMV 4.2 Book 1 (спецификация EMV), и там говорится, что мы должны использовать «Список AID». Он говорит: «Терминал выдает другую команду SELECT, используя следующий AID в своем списке». Я не могу этого понять и продолжить.

Любая помощь в том, как получить PSE для карты VISA или AID для получения данных кредитной карты?

Спасибо, Шекхар

Ответы [ 4 ]

6 голосов
/ 13 декабря 2012

Прежде всего, апплет PPSE не является чем-то конкретным ни для VISA, ни для MasterCard.Он определяется EMV и используется, как вы правильно заметили, для перечисления идентификаторов AID доступных платежных приложений на карте.Но если это не так, терминалы пытаются использовать все поддерживаемые идентификаторы AID для создания списка кандидатов.

Если вы хотите выбрать апплет VISA, но не знаете полного AID, вы можете использовать частичный выбор.Поскольку все VISA AID начинаются с VISA RID: A0 00 00 00 03. Вы можете попробовать отправить эту команду:

Это вернет первый экземпляр:

00 A4 04 00 05 A000 00 00 03 00

и это даст вам больше, если у вас есть на вашей карте:

00 A4 04 02 05 A0 00 00 00 03 00

3 голосов
/ 22 мая 2012

Итак, проблема в том, что вы не знаете AID своего приложения на карте? Нет способа получить их (кроме PSE), вы должны сначала узнать, какие приложения на карте вы поддерживаете. Таким образом, «Список AID» - это список AID, которые вы поддерживаете, о чем вам сообщил ваш покупатель. Вы можете попытаться создать этот список самостоятельно, основываясь на некоторых стандартных AID, которые вы перечислили здесь: http://en.wikipedia.org/wiki/EMV#Application_selection

1 голос
/ 12 июля 2012

Это немного странно для меня ... Мои исследования показывают, что для VISA это приложение всегда будет доступно, но для Mastercard оно не обязательно ...

В любом случае, вот команда, которую я посылаюна мой кардридер, чтобы выбрать это приложение:

//               OP CL P1 P2 LN DATA------------------------------------- EL
//select command 00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00

NSString* str= @"1PAY.SYS.DDF01";
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];
int datalength = data.length; 
NSMutableData *selectPSECommand = [[NSMutableData alloc] init];

[selectPSECommand appendBytes:"\x00" length:1]; //command class
[selectPSECommand appendBytes:"\xA4" length:1]; //APDU_INSTRUCTION_SELECT_FILE
[selectPSECommand appendBytes:"\x04" length:1]; //select file by name
[selectPSECommand appendBytes:"\x00" length:1]; //First or only occurrence of file
[selectPSECommand appendBytes:&datalength length:1]; //data length
[selectPSECommand appendData:data]; //the data we are sending
[selectPSECommand appendBytes:"\x00" length:1]; //expected response length. here it is 0. We are only selecting a file.

Пример кода для Objective C.

Сравните данные, которые вы отправляете, с данными, которые я посылаю, и посмотрите, соответствует ли оно.А пока я буду изучать список AID.

Надеюсь, это поможет.Ezfrag

0 голосов
/ 21 января 2016

Вы можете использовать список AID, например этот . Однако некоторые карты отвечают «неправильными» данными при переборе списка. у меня был случай, когда VISA V-Pay считывалось Maestro. Если вам нужно перебрать большой список AID, чтобы «открыть» информацию о карте, я бы порекомендовал вам добавить флаг, чтобы получить действительные AID с карты, а затем вернуться к основному методу, чтобы прочитать карту с основным AID. при условии.

Что-то вроде:

  1. Чтение карты итерацией по списку AID
  2. Если возвращается 0x90 (успешное чтение), извлечь данные
  3. Проверьте, где возвращенные данные имеют тип AID (0x4f).
  4. Если это так, очистите свой список и снова получите данные с соответствующим AID, теперь, когда вы точно знаете, что он правильный, поскольку он поступает непосредственно с карты.

Поскольку AID обычно поступает в первых записях с карты, этот цикл обеспечивает правильность процесса при минимальных временных затратах.

...