
我是需要用C#實作,和圖中的[37]連接上,然后能發APDU命令。
我在GitHub上找到danm-de/pcsc-sharp這個是C# 基于PC/SC訪問智能卡的。但代碼都沒注釋,沒chm檔案,看起來好費力。希望有經驗的可以推薦這方面好的博文或者專案代碼,感謝!
uj5u.com熱心網友回復:
沒有寫過,但是如果讓我寫,我回去找官方提供的資料以及二次開發的demo,然后依葫蘆畫瓢做uj5u.com熱心網友回復:
智能卡一般用的串口協議居多uj5u.com熱心網友回復:
串口就是要和圖中的[38]通信,我已經能和串口通信了。現在需要和[37]通信
uj5u.com熱心網友回復:
先看這里https://docs.microsoft.com/zh-cn/windows/win32/api/winscard/
大體上這種型別的操作,第一手資料是微軟官方api,C#里沒有直接提供的class的話,第3方封裝最簡單直接的步驟就是使用pinvoke呼叫C++的dll
(winscard.dll),所以想了解他怎么用,可以先看看C++的常規流程,他們的流程決定我們的流程(畢竟api是c++的api,nuget上能做的只是簡化呼叫宣告和物件化封裝,但使用流程和物件定義規定還得兼容C++的)。
明白這個了,我們在來看你給那個庫
https://github.com/danm-de/pcsc-sharp/blob/master/src/PCSC/Interop/Windows/WinSCardAPI.cs
[DllImport(WINSCARD_DLL, CharSet = CharSet.Unicode)]
private static extern int SCardEstablishContext(
[In] int dwScope,
[In] IntPtr pvReserved1,
[In] IntPtr pvReserved2,
[In, Out] ref IntPtr phContext);
可以看到他依舊還是使用的這種方式,只是外面對其做了一下簡化封裝
至于使用上你先看他的demo
https://github.com/danm-de/pcsc-sharp/tree/master/Examples
ps:從他的專案上看,個人建議使用Reactive版本的提供,我個人喜歡可觀測流版本(方便啊)
uj5u.com熱心網友回復:
一份C++ api的簡略說明https://blog.csdn.net/woshi_ziyu/article/details/7871559
基本上把這個看一遍,大體的使用流程就是清楚的,哪怕外面是C#封裝版本的,但基本的程序和使用邏輯不會有太大改變
uj5u.com熱心網友回復:
ps:我瞄了一眼對方的說明檔案,實際上這份說明檔案已經寫的很明確了var contextFactory = ContextFactory.Instance;
using (var ctx = contextFactory.Establish(SCardScope.System)) {
using (var isoReader = new IsoReader(ctx, "ACME Smartcard reader", SCardShareMode.Shared, SCardProtocol.Any, false)) {
//上面3行不需要看,他完全遵循C++的定義,查找連接設備,至于那些引數都是C++引數,你看c++檔案定義就好
//下面構造一個發送指令包
var apdu = new CommandApdu(IsoCase.Case2Short, isoReader.ActiveProtocol) {
CLA = 0x00, // Class
Instruction = InstructionCode.GetChallenge,
P1 = 0x00, // Parameter 1
P2 = 0x00, // Parameter 2
Le = 0x08 // Expected length of the returned data
};
//發送并獲取結果
var response = isoReader.Transmit(apdu);
Console.WriteLine("SW1 SW2 = {0:X2} {1:X2}", response.SW1, response.SW2);
// ..
}
}
到這種程度,你就只需要使用他就好,你不需要管他的代碼注釋?這樣的demo要注釋什么呢,這代碼一目了然哦。如果你想知道他底下具體實作,我說你到不必去看,前面已經說了,他其實就是呼叫winscard.dll。所以他的底層流程你可以不用看,他完全遵循C++的呼叫流程和定義。
uj5u.com熱心網友回復:
大佬
,你說的對,我只想呼叫連接的方法和發命令的方法就行,但我看這個專案里檔案一堆,所以不知道看哪些;那我先把example檔案夾下的看懂吧,多謝指教
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/254218.html
標籤:C#
下一篇:【100分】C#生成prn檔案給 printexp 愛普生7代列印機使用 寫真列印機 漢森主板 機器:萬利達1325
