2013-07-24 3 views
1

У меня есть смарт-карта и считыватель (Gemalto). Я хочу прочитать серийный номер карты с помощью C#. Я читаю документы/библиотеки на сайте поддержки Gemalto, но нет никакой полезной для меня информации.Как узнать серийный номер смарт-карты Gemalto?

Я надеюсь, что у кого-то есть опыт работы с Gemalto, помогите мне в некоторых примерах!

Большое спасибо!

ответ

2

Если вы имеете в виду SERIALNUMBER на карте вы можете сделать следующее:

Вам необходимо сделать ссылку на к DLL Off карты в Gemalto SDK. SmartCard.Runtime.dll SmartCard_Stub.dll

SmartCard.Transport.PCSC.SelectDialog dialog = new SmartCard.Transport.PCSC.SelectDialog(); 
CardAccessor ca = new CardAccessor(dialog.SelectedReader); 
if(ca.Logon()) 
{ 
ca.GetSerialNumber(); 
} 

Если вы имеете в виду серийный номер сертификата его общий иной подход.

+0

Как проверить, что наша APDU на Gemalto .net карты работает нормально? мы протестировали его с помощью клиентского серверного приложения, но как проверить, что он будет работать для устаревшей системы? – sms247

1

См. this post. На вашей карте могут немного отличаться (в частности, байт CLA).

В основном вам необходимо выбрать корень файловой системы карты (MF, a.k.a. 3F00), затем выбрать EFiccid (2FE2) и прочитать содержимое. Довольно просто в теории.

Для каждого шага имеется специальная команда APDU. Если библиотека Gemalto позволяет отправлять APDU, вам должно быть хорошо идти.

4

Вы должны отправить APDU на смарт-карту, запрашивая данные жизненного цикла продукта карты i.e (данные CPLC).
Некоторые типы карт имеют данные жизненного цикла карты (CPLC). Например, карты JCOP имеют это в GET DATA или GETCPLCDATA с тегом 0x9F7F или тегом 0x0101. Я считаю, что это тег глобальной платформы. Узнайте, какую спецификацию поддерживает ваша карта. Для карты Gemalto я надеюсь, что это сработает. данных, что я получил от моего Gemalto карты, запрашивая данные CPLC является:

Для 0x9F7F:

IC Fabricator :2 Bytes 
IC Type : 2 Bytes 
Operating System ID : 2 Bytes 
Operating System release date : 2 Bytes 
Operating System release level : 2 Bytes 
IC Fabrication Date : 2 Bytes (Y DDD) date in that year 
IC Serial Number : 4 Bytes 
IC Batch Identifier : 2 Bytes 
IC Module Fabricator : 2 Bytes 
IC Module Packaging Date : 2 Bytes 
ICC Manufacturer : 2 Bytes 
IC Embedding Date :2 Bytes 
IC Pre-Personalizer : 2 Bytes 
IC Pre-Perso. Equipment Date : 2 Bytes 
IC Pre-Perso. Equipment ID : 4 Bytes 
IC Personalizer : 4 Bytes 
IC Personalization Date : 2 Bytes 
IC Perso. Equipment ID : 4 Bytes 

Для 0x0101:

Card serial number: 8 bytes 
Reserved bytes: 3 bytes 0 
Flow identification: 1 byte 
Reserved bytes: 4 bytes 

К сожалению я не могу предоставить точные байт и может изменяться в ваш случай. просто проверьте, какой тег поддерживает ваша карта. и лучше обратиться к документации Global Platform и стандарту ISO 7816 (http://www.ttfn.net/techno/smartcards/iso7816_4.html). Надеюсь, это то, что вы ищете.

1

Вот как получить его через PowerShell:

Использование Gemalto IDPrime .NET SDK

Add-Type -Path "C:\Program Files (x86)\Gemalto\NET Smartcard Framework SDK\v2.2.180\Libraries\On Card\Framework Libraries\v2.1.213.9175\SmartCard.dll" 
Add-Type -Path "C:\Program Files (x86)\Gemalto\NET Smartcard Framework SDK\v2.2.180\bin\SmartCard.Runtime.dll" 
$Reader = New-Object SmartCard.Transport.PCSC.SelectDialog 
$Reader.ShowDialog() | Out-Null 

$SmartCard = New-Object SmartCard.Accessor.CardAccessor($Reader.SelectedReader) 

$SmartCardSN = [System.BitConverter]::ToString($SmartCard.GetSerialNumber()) 

Write-Host "Smartcard Serial Number: $SmartCardSN" 

$SmartCard.Dispose() 
$Reader.Dispose() 

Использование Gemalto IDPrime .NET PKCS # 11 Драйверы

Если вы хотите использовать библиотеку PKCS11 , это можно сделать следующим образом. Однако этот маршрут поставляется с ПРЕДУПРЕЖДЕНИЕ, так как он возвращает хеш серийного номера и НЕ является фактическим серийным номером. Пер Gemalto Документация:

В .NET PKCS # 11 библиотека выполняет MD5 хэш ДНС, представленную минидрайвера дает результат 16-байтов.Поскольку строка C_GetTokenInfo содержит всего 16 байт, она может отображать 16 символов хэш-результата только в формате ASCII. Эти 16 символов - это 8 MSB (крайние левые байты) хэш-результата.

Пример:

  1. The .NET PKCS # 11 запросов библиотеки 12-байтовый серийный номер карты (ДНС) от карты ID файла: 0x57 0x01 0x13 0x51 0x26 0xC7 0xD6 0x10 0x29 0x27 0xFF 0xFF
  2. .NET PKCS # 11 выполняет MD5 хэш на ДНС дает результат 16-байтовый: 0x05 0xCB 0x00 0x3D 0x76 0xD3 0xE9 0x4F 0x74 0x13 0x74 0x38 0xD8 0x8C 0xBF 0xB4
  3. в .NET PKCS # 11 преобразует хэш в ASCII strin г.
  4. И наконец, он заполняет поле serialNumber структуры TokenInfo (по 16 байт) с первыми 16 символами строки ASCII: «05CB003D76D3E94F», соответствующее 8 MSB хэша.
# www.pkcs11interop.net 
Add-Type -Path "C:\SomeFolder\Pkcs11Interop.4.0.0\lib\net45\Pkcs11Interop.dll" 

# Load Gemalto driver 
# 1 = AppType.SingleThreaded 
$pkcs11 = New-Object Net.Pkcs11Interop.HighLevelAPI.Pkcs11("C:\Program Files (x86)\Gemalto\DotNet PKCS11\gtop11dotnet64.dll",1) 

# 0 = SlotsType.WithTokenPresent 
$Slots = $pkcs11.GetSlotList(0) 

$CardReader = $Slots[0] # Usually first slot 

$CardReader.GetTokenInfo().SerialNumber 

$CardReader.CloseAllSessions() 
$pkcs11.Dispose() 

 Смежные вопросы

  • Нет связанных вопросов^_^