嗯,我發現我的一個結構有問題(沒有聲明一個字節數組成員作爲數組),我不再有崩潰問題。然而,我仍然沒有使用CryptDecodeObject取得任何成功。下面的代碼是我正在使用的。 GetLastErr只返回0(幫助不大)。如果有人想到我可能會出錯的地方,請告訴我!
Dim iFile As Integer
Dim sPEM As String, sDER As String
Dim lenPEM As Long, lenDER As Long
Dim publicKeyInfo As CERT_PUBLIC_KEY_INFO
Dim publicKeyInfoLen As Long
iFile = FreeFile
Open app.Path & "\publickey.txt" For Binary As iFile
sPEM = Space(LOF(iFile))
Get #iFile, , sPEM
Close iFile
lenPEM = Len(sPEM)
' Determine buffer length required for the DER string
CryptStringToBinary sPEM, lenPEM, CRYPT_STRING_BASE64HEADER, 0, lenDER, 0, 0
sDER = Space(lenDER)
' Do conversion to binary
If Not CryptStringToBinary(sPEM, lenPEM, CRYPT_STRING_BASE64HEADER, sDER, lenDER, 0, 0) Then
Debug.Print sDER
Else
MsgBox "CryptStringToBinary Error " & GetLastError
Exit Sub
End If
' Do conversion to blob
If Not CryptDecodeObject(X509_ASN_ENCODING, X509_PUBLIC_KEY_INFO, sDER, lenDER, 0, publicKeyInfo, publicKeyInfoLen) Then
MsgBox "CryptDecodeObject Error: " & GetLastError
Exit Sub
End If
我可以張貼的所有功能,如果有人認爲這將有助於類型聲明,我相信他們是正確的。
這裏是由OpenSSL的生成的公開密鑰:
----- BEGIN PUBLIC KEY ----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANWhFRxt/ZF56uGO7GsbvevmX42 // THM JdseUwQNot/ihXCPRadf0SPYbtHS6/JA92pCX7NxfgYNoYlOFb0IYYcCAwEAAQ == --- --END公鑰-----
謝謝。我的聲明很好,但我有一種感覺,我的PCRYPT_DECODE_PARA(和所有關聯的結構)沒有正確聲明。我還沒有找到任何有關VB的文檔,只有標準的C結構。由於某些原因,我不能有任何外部依賴,所以現在C存根已經出來了。我可能會試一試PHPSecLib,看看我能否在兩端都使用XML編碼的密鑰。看來CryptoAPI支持這些。 – 2012-08-09 13:47:14