안드로이드/NFC:스마트카드(EMV)에서 ATR 읽기
문제
내 휴대폰으로 통신하고 싶은 EMV 스마트카드를 받았습니다.통신 자체는 IsoDep을 통해 문제 없이 작동하지만 ATR을 어떻게 얻을 수 있는지 알 수 없습니다.내가 아는 한 의도에는 ATR이 포함되어야 합니다. 누군가 나에게 필요한 코드를 알려주실 수 있습니까?
또는 이것이 가능하지 않은 경우 ATR이 답인 SELECT와 같은 명령을 사용하여 카드를 웜 리셋하는 방법을 아는 사람이 있을 수 있습니다.
해결책
비접촉식 카드에는 ATR이 없습니다.하지만 ATS(Answer to Select)의 과거 바이트에 관심이 있을 수 있습니다.다음을 호출하여 검색할 수 있습니다. getHistoricalBytes()
:
Tag tag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));
IsoDep iso = IsoDep.get(tag);
NfcA nfcA = NfcA.get(tag);
if (nfcA == null || iso == null)
return; // not an IsoDep+NfcA tag
byte[] histBytes = iso.getHistoricalBytes();
...
이는 ISO 14443 유형 A 태그(NfcA
).유형 B 태그의 경우(NfcB
) 조사해 보시기 바랍니다. getHiLayerResponse()
.
다른 팁
비접촉식 카드는 ATR을 반환합니다.그러나 현재 Android NFC API에서 ATR을 얻을 수 없습니다.Android NFC API는 ATR의 역사적 바이트 만 반환합니다.
비접촉식 카드가 반환하는 이유는 ATR을 반환합니다. ATR은 RESET에 대한 7816 답변입니다.리더 (이 경우 NFC 폰)는 비접촉식 인터페이스 ISO 14443-4를 통해 운반되는 ISO 7816 (T= CL) APDU 교환을 사용하여 스마트 카드와 협의합니다.이 경우 ISO 7816이 있으므로 ATR을 얻을 수 있습니다.
제휴하지 않습니다 StackOverflow