スマートカード用にC#(.NET)でプログラミングを開始するにはどうすればよいですか?最初は、カードリーダー(Omnikeyなど)の名前を知って、それを印刷する必要があります。
答えてくれてありがとう、アレス。
しばらく前に、シンプルで簡単なスマートカードコードになると思っていたものを書かなければなりませんでした。それは、公園を散歩することではありませんでした。まず第一に、スマートカードに関する優れた情報をネット上で入手するのは難しいことが判明しました。そして、私がいくつかのWebサイトを見つけたとき、基礎となるWin32 API呼び出しやその他の低レベルのものについて多くの議論がありましたが、これは非常に読みやすいものではありません。
問題は、それらが理由でスマートカードと呼ばれているということです。その理由は、基本的に、組み込みマイクロプロセッサが理解して応答するコマンドを送信することにより、組み込みマイクロプロセッサと対話しているためです。多くのメーカーが独自のコマンドを実装するのは良い考えだと考えていたため、これは少し複雑になる可能性があります。そのため、使用するカードの種類に応じて多くのことが異なります。その上、スマートカードのように見えるが実際にはスマートカードではなく、「標準」のスマートカードインターフェイスも使用しないカードがあるため、リーダーを起動するためだけにWindowsSmartCardAPIを使用することになります。スマートカードリーダーの特別なAPIは、残りのWebサイトのあいまいなコーナーに.libとして提供されています...
ええと、私は最終的にアプリを動作させることができましたが、私が言ったように、それは簡単ではありませんでした。とにかく、それはそれほど難しいことではないと思い込んで、私は大きな間違いを犯しました。
あなたが本当にスマートカードを使いたいのなら、あなたの最善の策はその主題についての良い本を手に入れることだと思いますが、私も初心者に過ぎないので、そこであなたを助けることはできません。
Webサイトに関して、私が掘り下げることができたC#用語で最も有用なものは、.Net用のスマートカードフレームワークでした。著者は同じですが、これはmichaelvdnestによって投稿されたものと同じ記事ではないことに注意してください。リンク先の記事では、ネイティブスマートカードAPIのC#ラッパーについて説明していますが、michaelvdnestはXMLをミックスに追加していますが、まだ読んでいないため、どのようにすればよいか正確にはわかりません。
それで、記事と一緒に提供されたコードを分析し始めてください、そして幸運を祈ります。メモリが私に役立つ場合、リーダー列挙のものは非常に簡単に見つけることができます。
CodeProjectで.NET用のスマートカードフレームワークを確認してください。スマートカードアプリケーションをプログラムするための.NETのXMLフレームワークについて説明します。
私はそれがずっと遅いことを知っています.....
しかし
あなたは非常に使いやすく、ここで個人使用の専門図書館を無料で手に入れることができます:
https://www.smartcard-api.com/
ここには、コミュニティ(完全に無料で使用できる)スマートカードライブラリもあります。
https://www.nuget.org/packages/PCSC
近年、商用サポートが必要な場合は、スマートカードAPIではなくNu-getを使用することを好みましたが、スマートカードAPIlibが最良の選択です。
それができたら、APDUと、カード間でAPDUを往復する方法を理解する必要があります。
それは本当にカバーすべき大きな主題です、私は標準のチップ&ピンEMVカードのすべての一般的な要素を読み取るコードを持っています残念ながらそれは金融サービスクライアントのために書かれたのであなたにそれを与えることはできません、しかし私はいくつかを説明することができますカードを読むためにあなたが引き受ける必要があることの。
他のカードの場合、それはカード自体に依存します。たとえば、ここにはカードリーダーと空白のカードがあり、それらのいくつかにはアクセス方法しかわからないカスタムデータがありますが、それでも古い衛星と再び違うトラベルカード。
ここでいくつかのアイデアを得ることができます:
JavaのEMVスマートカードからPANを読み取るにはどうすればよいですか
そして、ここで見つけられる一般的なスマートカードに関する多くの情報があります:
https://web.archive.org/web/20160329205518/http://wrankl.de/SCTables/SCTables.html
特に一般的なもの(いくつかあります)
Visual Studio 2015で、スマートカードを読み取るためのアプリに取り組んでいます。あなたがしたいのは、スマートカードリーダーであるUSBデバイスをコンピューターに接続することです。次に、探している情報のリターンを繰り返します。リーダーにはかなりの数のプロパティがありますが、これが私が使用することを選択したものです。これがあなたに正しい方向へのスタートを与えることを願っています:
static List<USBDeviceInfo> GetUSBDevices()
{
List<USBDeviceInfo> devices = new List<USBDeviceInfo>();
ManagementObjectCollection collection;
using (var searcher = new ManagementObjectSearcher(@"Select * FROM Win32_PnPEntity where Description Like ""%Smart%card%"""))
collection = searcher.Get();
string Device_ID = "";
foreach (var device in collection)
{
devices.Add(new USBDeviceInfo(
(string)device.GetPropertyValue("DeviceID"),
(string)device.GetPropertyValue("PNPDeviceID"),
(string)device.GetPropertyValue("Name"),
(string)device.GetPropertyValue("Description"),
(string)device.GetPropertyValue("Status")));
Device_ID = (string)device.GetPropertyValue("DeviceID");
}
collection.Dispose();
return devices;
}