<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>「使用C#讀取自然人憑證(MOICA)及數位簽章」的迴響</title>
	<atom:link href="http://www.blave.net.tw/454/feed" rel="self" type="application/rss+xml" />
	<link>http://www.blave.net.tw/454</link>
	<description>相機是我的畫筆，世界是我的畫紙</description>
	<lastBuildDate>Fri, 24 Jun 2011 08:39:10 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>由：Blave Huang</title>
		<link>http://www.blave.net.tw/454/comment-page-1#comment-202</link>
		<dc:creator>Blave Huang</dc:creator>
		<pubDate>Fri, 24 Jun 2011 08:39:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.blave.net.tw/?p=454#comment-202</guid>
		<description>新書已出版囉~有需要的朋友們請參考參考囉~
http://www.blave.net.tw/599</description>
		<content:encoded><![CDATA[<p>新書已出版囉~有需要的朋友們請參考參考囉~<br />
<a href="http://www.blave.net.tw/599" rel="nofollow">http://www.blave.net.tw/599</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>由：Admin</title>
		<link>http://www.blave.net.tw/454/comment-page-1#comment-191</link>
		<dc:creator>Admin</dc:creator>
		<pubDate>Mon, 21 Mar 2011 08:28:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.blave.net.tw/?p=454#comment-191</guid>
		<description>嗯！我也記得好像有序號長度的問題，有機會再來試試囉~~</description>
		<content:encoded><![CDATA[<p>嗯！我也記得好像有序號長度的問題，有機會再來試試囉~~</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：fongming</title>
		<link>http://www.blave.net.tw/454/comment-page-1#comment-190</link>
		<dc:creator>fongming</dc:creator>
		<pubDate>Mon, 21 Mar 2011 07:20:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.blave.net.tw/?p=454#comment-190</guid>
		<description>是的,我也是看到他sample code中似乎是打錯字來的~
但是我想因為他是memcpy進去的,那個打錯字似乎是沒有影響才對
VB版本的我可能再試試看, 如果真的不行就先參考您的c#版本了XD
另外,針對OCSP的certStatus回傳值是2
我剛剛得到中華電信的解釋
原來要丟進去的SerialNumber如果第一個byte為00,ㄧ定要拿掉= =
我試過,拿掉之後果真回傳值就是0了 :em29: 
至於為什麼要拿掉,我也不解, 我猜想可能是他們當初在做時
工商憑證跟自然人的都做同一套所以一定要ㄧ樣的規則吧 :em39: 
以下是他們mail給我的解釋:

GPKI中所使用的憑證序號是一個長度為16 bytes的正整數，
但根據DER編碼對正數所使用2補數規則，
所以若遇到憑證序號開頭是a_或b_或c_或d_或e_或f_，
則會在最開頭補上0(16進位顯示為00)，因此憑證序號長度就變成17 bytes(例:MOEACA憑證序號)；
若遇到憑證序號開頭是0~9，則憑證序號長度為16 bytes(例: GRCA自簽憑證)。
結論是：憑證序號長度有16 bytes和17 bytes兩種。

建議可以到MOEACA網站下載&quot;GRCA自簽憑證&quot;和&quot;MOEACA憑證&quot;來比較一下會更清楚。

GRCA自簽憑證

1f 9d 59 5a d7 2f c2 06 44 a5 80 08 69 e3 5e f6

 MOEACA憑證
00 fd b3 f5 36 49 99 e6 4e 8c cb 36 62 12 90 e3 2b</description>
		<content:encoded><![CDATA[<p>是的,我也是看到他sample code中似乎是打錯字來的~<br />
但是我想因為他是memcpy進去的,那個打錯字似乎是沒有影響才對<br />
VB版本的我可能再試試看, 如果真的不行就先參考您的c#版本了XD<br />
另外,針對OCSP的certStatus回傳值是2<br />
我剛剛得到中華電信的解釋<br />
原來要丟進去的SerialNumber如果第一個byte為00,ㄧ定要拿掉= =<br />
我試過,拿掉之後果真回傳值就是0了 <img src="http://www.blave.net.tw/wp-content/plugins/emotions/images/em29.gif" alt=":em29:" /><br />
至於為什麼要拿掉,我也不解, 我猜想可能是他們當初在做時<br />
工商憑證跟自然人的都做同一套所以一定要ㄧ樣的規則吧 <img src="http://www.blave.net.tw/wp-content/plugins/emotions/images/em39.gif" alt=":em39:" /><br />
以下是他們mail給我的解釋:</p>
<p>GPKI中所使用的憑證序號是一個長度為16 bytes的正整數，<br />
但根據DER編碼對正數所使用2補數規則，<br />
所以若遇到憑證序號開頭是a_或b_或c_或d_或e_或f_，<br />
則會在最開頭補上0(16進位顯示為00)，因此憑證序號長度就變成17 bytes(例:MOEACA憑證序號)；<br />
若遇到憑證序號開頭是0~9，則憑證序號長度為16 bytes(例: GRCA自簽憑證)。<br />
結論是：憑證序號長度有16 bytes和17 bytes兩種。</p>
<p>建議可以到MOEACA網站下載"GRCA自簽憑證"和"MOEACA憑證"來比較一下會更清楚。</p>
<p>GRCA自簽憑證</p>
<p>1f 9d 59 5a d7 2f c2 06 44 a5 80 08 69 e3 5e f6</p>
<p> MOEACA憑證<br />
00 fd b3 f5 36 49 99 e6 4e 8c cb 36 62 12 90 e3 2b</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：Admin</title>
		<link>http://www.blave.net.tw/454/comment-page-1#comment-189</link>
		<dc:creator>Admin</dc:creator>
		<pubDate>Mon, 21 Mar 2011 06:52:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.blave.net.tw/?p=454#comment-189</guid>
		<description>我記得當時搞這個也搞很久…
後來發現查詢時間應為RequestTime，應為API開發人員將R誤植為P，因此只能將錯就錯。
因此OCSstruct裡的最後一個property，故意改為public fixed byte PequestTime[32];就可以了，您試試看？</description>
		<content:encoded><![CDATA[<p>我記得當時搞這個也搞很久…<br />
後來發現查詢時間應為RequestTime，應為API開發人員將R誤植為P，因此只能將錯就錯。<br />
因此OCSstruct裡的最後一個property，故意改為public fixed byte PequestTime[32];就可以了，您試試看？</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：fongming</title>
		<link>http://www.blave.net.tw/454/comment-page-1#comment-188</link>
		<dc:creator>fongming</dc:creator>
		<pubDate>Mon, 21 Mar 2011 06:15:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.blave.net.tw/?p=454#comment-188</guid>
		<description>hi
不好意思我又來了
試了一下您的code之後,果然是可以正常得到ost的回傳值 :em69: 
但是很奇怪的也跟您一樣certStatus永遠都是2 :em35: 
這點真的是不知道為什麼,我是拿我自己的卡試的= =
難道說這個OCSP是不能用的嗎 :em35: 

另外一點就是回到我最原始的問題,之前我說我會有一個
-603912959的err code, 當時是用vb.net寫的
後來把您的code翻成vb.net也會有同樣error
我對照了一下我原始的code跟您的,發覺差異的地方就在於
一些宣告的部份,現在我還沒有找到原因,如果您熟悉vb.net的話
是否也能指教一下呢? 我試著把vb的code貼一下

     _
    Private Shared Function BuildTobesignedOCSPRequest(ByRef OCSp As OCSstruct, ByVal num As Integer, _
        ByVal Nounce As String, ByVal iNounceLength As Integer, _
        ByRef RequestIssueCertificate As Byte(), ByRef ucppTobesignedOCSPReq As Byte(), _
        ByRef iTobesignedOCSPReqLength As Integer) As Integer
    End Function


 _
Public Structure OCSstruct
     _
    Public SerialNumber As Byte()       &#039;憑證序號
    Public ResponseStatus As Integer    &#039;OCS之Response狀態
    Public CertStatus As Integer        &#039;憑證狀態
    Public RevokeReason As Integer      &#039;廢止理由代碼
     _
    Public RequestTime As Byte()        &#039;Request時間
End Structure

 Public Shared Function VerifyCertViaOCSP(ByVal certCA As X509Certificate2, ByVal certOCSP As X509Certificate2, ByVal certUser As X509Certificate2) As OCSstruct
        Dim ocs As New OCSstruct()

        Dim strSN As String = certUser.SerialNumber
        ocs.SerialNumber = New Byte(19) {}
        For i As Integer = 0 To 19
            If i &lt;= strSN.Length \ 2 - 1 Then
                ocs.SerialNumber(i) = Convert.ToByte(strSN.Substring(i * 2, 2), 16)
            Else
                ocs.SerialNumber(i) = Convert.ToByte(&quot;0&quot;, 16)
            End If
        Next

        ocs.CertStatus = 0
        ocs.ResponseStatus = 0
        ocs.RevokeReason = 0
        ocs.RequestTime = New Byte(31) {}
        For i As Integer = 0 To 31
            ocs.RequestTime(i) = Convert.ToByte(&quot;0&quot;, 16)
        Next

        Dim TBSReq As Byte() = New Byte(0) {}
        Dim iTBSReqLength As Integer = 0
        Dim iReturn As Integer = BuildTobesignedOCSPRequest(ocs, 1, &quot;1234567890&quot;, 10, certCA.Export(X509ContentType.Cert), TBSReq, _
          iTBSReqLength)
        TBSReq = New Byte(iTBSReqLength - 1) {}
        iReturn = BuildTobesignedOCSPRequest(ocs, 1, &quot;1234567890&quot;, 10, certCA.Export(X509ContentType.Cert), TBSReq, _
         iTBSReqLength)

        Return ocs
    End Function

在第一次呼叫BuildTobesignedOCSPRequest就會彈那個錯了
而且iTBSReqLength也沒法正常拿到值
至於結構的宣告,試過改用VBFixedArray 也沒有用
目前對於這點感到相當苦惱中 :em41:</description>
		<content:encoded><![CDATA[<p>hi<br />
不好意思我又來了<br />
試了一下您的code之後,果然是可以正常得到ost的回傳值 <img src="http://www.blave.net.tw/wp-content/plugins/emotions/images/em69.gif" alt=":em69:" /><br />
但是很奇怪的也跟您一樣certStatus永遠都是2 <img src="http://www.blave.net.tw/wp-content/plugins/emotions/images/em35.gif" alt=":em35:" /><br />
這點真的是不知道為什麼,我是拿我自己的卡試的= =<br />
難道說這個OCSP是不能用的嗎 <img src="http://www.blave.net.tw/wp-content/plugins/emotions/images/em35.gif" alt=":em35:" /> </p>
<p>另外一點就是回到我最原始的問題,之前我說我會有一個<br />
-603912959的err code, 當時是用vb.net寫的<br />
後來把您的code翻成vb.net也會有同樣error<br />
我對照了一下我原始的code跟您的,發覺差異的地方就在於<br />
一些宣告的部份,現在我還沒有找到原因,如果您熟悉vb.net的話<br />
是否也能指教一下呢? 我試著把vb的code貼一下</p>
<p>     _<br />
    Private Shared Function BuildTobesignedOCSPRequest(ByRef OCSp As OCSstruct, ByVal num As Integer, _<br />
        ByVal Nounce As String, ByVal iNounceLength As Integer, _<br />
        ByRef RequestIssueCertificate As Byte(), ByRef ucppTobesignedOCSPReq As Byte(), _<br />
        ByRef iTobesignedOCSPReqLength As Integer) As Integer<br />
    End Function</p>
<p> _<br />
Public Structure OCSstruct<br />
     _<br />
    Public SerialNumber As Byte()       '憑證序號<br />
    Public ResponseStatus As Integer    'OCS之Response狀態<br />
    Public CertStatus As Integer        '憑證狀態<br />
    Public RevokeReason As Integer      '廢止理由代碼<br />
     _<br />
    Public RequestTime As Byte()        'Request時間<br />
End Structure</p>
<p> Public Shared Function VerifyCertViaOCSP(ByVal certCA As X509Certificate2, ByVal certOCSP As X509Certificate2, ByVal certUser As X509Certificate2) As OCSstruct<br />
        Dim ocs As New OCSstruct()</p>
<p>        Dim strSN As String = certUser.SerialNumber<br />
        ocs.SerialNumber = New Byte(19) {}<br />
        For i As Integer = 0 To 19<br />
            If i &lt;= strSN.Length \ 2 - 1 Then<br />
                ocs.SerialNumber(i) = Convert.ToByte(strSN.Substring(i * 2, 2), 16)<br />
            Else<br />
                ocs.SerialNumber(i) = Convert.ToByte(&quot;0&quot;, 16)<br />
            End If<br />
        Next</p>
<p>        ocs.CertStatus = 0<br />
        ocs.ResponseStatus = 0<br />
        ocs.RevokeReason = 0<br />
        ocs.RequestTime = New Byte(31) {}<br />
        For i As Integer = 0 To 31<br />
            ocs.RequestTime(i) = Convert.ToByte(&quot;0&quot;, 16)<br />
        Next</p>
<p>        Dim TBSReq As Byte() = New Byte(0) {}<br />
        Dim iTBSReqLength As Integer = 0<br />
        Dim iReturn As Integer = BuildTobesignedOCSPRequest(ocs, 1, &quot;1234567890&quot;, 10, certCA.Export(X509ContentType.Cert), TBSReq, _<br />
          iTBSReqLength)<br />
        TBSReq = New Byte(iTBSReqLength - 1) {}<br />
        iReturn = BuildTobesignedOCSPRequest(ocs, 1, &quot;1234567890&quot;, 10, certCA.Export(X509ContentType.Cert), TBSReq, _<br />
         iTBSReqLength)</p>
<p>        Return ocs<br />
    End Function</p>
<p>在第一次呼叫BuildTobesignedOCSPRequest就會彈那個錯了<br />
而且iTBSReqLength也沒法正常拿到值<br />
至於結構的宣告,試過改用VBFixedArray 也沒有用<br />
目前對於這點感到相當苦惱中 <img src="http://www.blave.net.tw/wp-content/plugins/emotions/images/em41.gif" alt=":em41:" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>由：fongming</title>
		<link>http://www.blave.net.tw/454/comment-page-1#comment-187</link>
		<dc:creator>fongming</dc:creator>
		<pubDate>Mon, 21 Mar 2011 01:18:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.blave.net.tw/?p=454#comment-187</guid>
		<description>真是太感謝您了,
小弟研究一下,另外也祝您的新書大賣!!</description>
		<content:encoded><![CDATA[<p>真是太感謝您了,<br />
小弟研究一下,另外也祝您的新書大賣!!</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：Admin</title>
		<link>http://www.blave.net.tw/454/comment-page-1#comment-186</link>
		<dc:creator>Admin</dc:creator>
		<pubDate>Fri, 18 Mar 2011 12:12:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.blave.net.tw/?p=454#comment-186</guid>
		<description>抱歉…現在才看到這則留言…
Delphi弟不熟，但應該還是可以Access CSP才對~
您再試試看囉~</description>
		<content:encoded><![CDATA[<p>抱歉…現在才看到這則留言…<br />
Delphi弟不熟，但應該還是可以Access CSP才對~<br />
您再試試看囉~</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：Admin</title>
		<link>http://www.blave.net.tw/454/comment-page-1#comment-185</link>
		<dc:creator>Admin</dc:creator>
		<pubDate>Fri, 18 Mar 2011 12:09:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.blave.net.tw/?p=454#comment-185</guid>
		<description>弟近日將出版一本介紹數位憑證的書，以下是節錄第12章的部分內容，希望對您有幫助。
1. 先弄一個struct:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
unsafe public struct OCSstruct
{
    public fixed byte SerialNumber[20];
    public int ResponseStatus;
    public int CertStatus;
    public int RevokeReason;
    public fixed byte PequestTime[32];
}
CertStatus回傳值的代表：
	0：憑證存在且未廢止
	1：憑證已經永久或暫時廢止
	2：無此憑證(該憑證不是MOICA所發行)

2. 建立Entry Points:
[DllImport(&quot;CHTHiSECURE5_NetFuncva.dll&quot;)]
private static extern int BuildTobesignedOCSPRequest(
    ref OCSstruct ocs,
    int num,    // OCS個數，填1即可
    string Nounce,  // OCSPRequest的Nounce欄位資料(填1~0)
    int NounceLength,   // Nounce的長度
    byte[] RequestIssueCertificate, // MOICA憑證
    byte[] ToBeSignedRequest,   // 用來簽章的資料
    ref int ToBeSignedRequestLength
    );

[DllImport(&quot;CHTHiSECURE5_NetFuncva.dll&quot;)]
private static extern int QueryOCSfromOCSPRequest(
    ref OCSstruct ocs,
    int num,
    byte[] ToBeSignedOCSPReq,
    int ToBeSingedOCSPReqLength,
    byte[] RequstSignature,
    int RequestSignatureLength,
    byte[] RequestIssueCertificate, // MOICA憑證
    byte[] SenderCertificate,   // 要檢查的憑證
    byte[] OCSPServerCertificate,   // OCSP憑證
    string ServerURL,   // OCSP網址
    string ProxyName,
    int ProxyPort);

3. 下面這個方法，用來呼叫API，請API幫我們檢驗指定的憑證是否有問題：
unsafe public static OCSstruct VerifyCertViaOCSP(X509Certificate2 certCA, X509Certificate2 certOCSP, X509Certificate2 certUser)
{
    OCSstruct ocs = new OCSstruct();

    string strSN = certUser.SerialNumber;
    for (int i = 0; i &lt; strSN.Length / 2; i++)
        ocs.SerialNumber[i] = Convert.ToByte(strSN.Substring(i * 2, 2), 16);

    byte[] TBSReq = new byte[0];
    int iTBSReqLength = 0;
    int iReturn = BuildTobesignedOCSPRequest(
        ref ocs,
        1,
        &quot;1234567890&quot;,
        10,
        certCA.Export(X509ContentType.Cert),
        TBSReq,
        ref iTBSReqLength);
    TBSReq = new byte[iTBSReqLength];
    iReturn = BuildTobesignedOCSPRequest(
        ref ocs,
        1,
        &quot;1234567890&quot;,
        10,
        certCA.Export(X509ContentType.Cert),
        TBSReq,
        ref iTBSReqLength);

    iReturn = QueryOCSfromOCSPRequest(
        ref ocs,
        1,
        TBSReq,
        iTBSReqLength,
        null,
        0,
        certCA.Export(X509ContentType.Cert),
        certUser.Export(X509ContentType.Cert),
        certOCSP.Export(X509ContentType.Cert),
        &quot;moica.nat.gov.tw&quot;,
        null,
        0);
    return ocs;
}

4. 在專案屬性中，將「容許Unsafe程式碼」打勾

屆時出版，還請大家多多支持~</description>
		<content:encoded><![CDATA[<p>弟近日將出版一本介紹數位憑證的書，以下是節錄第12章的部分內容，希望對您有幫助。<br />
1. 先弄一個struct:<br />
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]<br />
unsafe public struct OCSstruct<br />
{<br />
    public fixed byte SerialNumber[20];<br />
    public int ResponseStatus;<br />
    public int CertStatus;<br />
    public int RevokeReason;<br />
    public fixed byte PequestTime[32];<br />
}<br />
CertStatus回傳值的代表：<br />
	0：憑證存在且未廢止<br />
	1：憑證已經永久或暫時廢止<br />
	2：無此憑證(該憑證不是MOICA所發行)</p>
<p>2. 建立Entry Points:<br />
[DllImport("CHTHiSECURE5_NetFuncva.dll")]<br />
private static extern int BuildTobesignedOCSPRequest(<br />
    ref OCSstruct ocs,<br />
    int num,    // OCS個數，填1即可<br />
    string Nounce,  // OCSPRequest的Nounce欄位資料(填1~0)<br />
    int NounceLength,   // Nounce的長度<br />
    byte[] RequestIssueCertificate, // MOICA憑證<br />
    byte[] ToBeSignedRequest,   // 用來簽章的資料<br />
    ref int ToBeSignedRequestLength<br />
    );</p>
<p>[DllImport("CHTHiSECURE5_NetFuncva.dll")]<br />
private static extern int QueryOCSfromOCSPRequest(<br />
    ref OCSstruct ocs,<br />
    int num,<br />
    byte[] ToBeSignedOCSPReq,<br />
    int ToBeSingedOCSPReqLength,<br />
    byte[] RequstSignature,<br />
    int RequestSignatureLength,<br />
    byte[] RequestIssueCertificate, // MOICA憑證<br />
    byte[] SenderCertificate,   // 要檢查的憑證<br />
    byte[] OCSPServerCertificate,   // OCSP憑證<br />
    string ServerURL,   // OCSP網址<br />
    string ProxyName,<br />
    int ProxyPort);</p>
<p>3. 下面這個方法，用來呼叫API，請API幫我們檢驗指定的憑證是否有問題：<br />
unsafe public static OCSstruct VerifyCertViaOCSP(X509Certificate2 certCA, X509Certificate2 certOCSP, X509Certificate2 certUser)<br />
{<br />
    OCSstruct ocs = new OCSstruct();</p>
<p>    string strSN = certUser.SerialNumber;<br />
    for (int i = 0; i &lt; strSN.Length / 2; i++)<br />
        ocs.SerialNumber[i] = Convert.ToByte(strSN.Substring(i * 2, 2), 16);</p>
<p>    byte[] TBSReq = new byte[0];<br />
    int iTBSReqLength = 0;<br />
    int iReturn = BuildTobesignedOCSPRequest(<br />
        ref ocs,<br />
        1,<br />
        &quot;1234567890&quot;,<br />
        10,<br />
        certCA.Export(X509ContentType.Cert),<br />
        TBSReq,<br />
        ref iTBSReqLength);<br />
    TBSReq = new byte[iTBSReqLength];<br />
    iReturn = BuildTobesignedOCSPRequest(<br />
        ref ocs,<br />
        1,<br />
        &quot;1234567890&quot;,<br />
        10,<br />
        certCA.Export(X509ContentType.Cert),<br />
        TBSReq,<br />
        ref iTBSReqLength);</p>
<p>    iReturn = QueryOCSfromOCSPRequest(<br />
        ref ocs,<br />
        1,<br />
        TBSReq,<br />
        iTBSReqLength,<br />
        null,<br />
        0,<br />
        certCA.Export(X509ContentType.Cert),<br />
        certUser.Export(X509ContentType.Cert),<br />
        certOCSP.Export(X509ContentType.Cert),<br />
        &quot;moica.nat.gov.tw&quot;,<br />
        null,<br />
        0);<br />
    return ocs;<br />
}</p>
<p>4. 在專案屬性中，將「容許Unsafe程式碼」打勾</p>
<p>屆時出版，還請大家多多支持~</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：fongming</title>
		<link>http://www.blave.net.tw/454/comment-page-1#comment-184</link>
		<dc:creator>fongming</dc:creator>
		<pubDate>Fri, 18 Mar 2011 09:48:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.blave.net.tw/?p=454#comment-184</guid>
		<description>您好
我最近也在弄這塊,從您的程式學到不少東西!
現在碰到的問題是要弄OCSP時
呼叫他的BuildTobesignedOCSPRequest 都會彈一個-603912959的錯誤
不知道您之前有做這塊嗎
如果有的話是否能指教一下呢?感激不盡!</description>
		<content:encoded><![CDATA[<p>您好<br />
我最近也在弄這塊,從您的程式學到不少東西!<br />
現在碰到的問題是要弄OCSP時<br />
呼叫他的BuildTobesignedOCSPRequest 都會彈一個-603912959的錯誤<br />
不知道您之前有做這塊嗎<br />
如果有的話是否能指教一下呢?感激不盡!</p>
]]></content:encoded>
	</item>
	<item>
		<title>由：nanwaychen</title>
		<link>http://www.blave.net.tw/454/comment-page-1#comment-178</link>
		<dc:creator>nanwaychen</dc:creator>
		<pubDate>Tue, 28 Sep 2010 05:31:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.blave.net.tw/?p=454#comment-178</guid>
		<description>Hi 請教一下 
HiSecure 的API 有辦法在 DELPHI 下編譯成WIN32 的程式使用嗎!!
在 DELPHI 下 要呼叫DLL 都需要 自行去宣告的!!
有這方面的資料或宣告檔可提供參考嗎??
只是要單純讀出卡號和比對USER輸入的PINCODE 是否符合的功能即可!!
若不使用 HiSecure ~ 那使用微軟的CSP 方式是否也可做到??</description>
		<content:encoded><![CDATA[<p>Hi 請教一下<br />
HiSecure 的API 有辦法在 DELPHI 下編譯成WIN32 的程式使用嗎!!<br />
在 DELPHI 下 要呼叫DLL 都需要 自行去宣告的!!<br />
有這方面的資料或宣告檔可提供參考嗎??<br />
只是要單純讀出卡號和比對USER輸入的PINCODE 是否符合的功能即可!!<br />
若不使用 HiSecure ~ 那使用微軟的CSP 方式是否也可做到??</p>
]]></content:encoded>
	</item>
</channel>
</rss>

