嗯,我发现我的一个结构有问题(没有声明一个字节数组成员作为数组),我不再有崩溃问题。然而,我仍然没有使用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