CryptAcquireContext" Keyset未定义"错误

时间:2017-05-09 22:50:11

标签: vb.net winapi

CryptAcquireContext函数返回FALSE,其中未定义Keyset错误消息。这是我的代码。

<DllImport("advapi32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
Public Shared Function CryptAcquireContext(ByRef hProv As IntPtr, ByVal pszContainer As String, ByVal pszProvider As String, ByVal dwProvType As Int32, ByVal dwFlags As UInt32) As Boolean
End Function

<DllImport("advapi32.dll", SetLastError:=True)>
Public Shared Function CryptCreateHash(ByVal hProv As IntPtr, ByVal Algid As Int32, ByVal hKey As IntPtr, ByVal dwFlags As Int32, ByRef phHash As IntPtr) As Boolean
End Function

<DllImport("advapi32.dll", SetLastError:=True)>
Public Shared Function CryptHashData(ByVal hHash As IntPtr, ByVal pbData() As Byte, ByVal dwDataLen As Int32, ByVal dwFlags As Int32) As Boolean
End Function

Public Const PROV_RSA_FULL As Int32 = 1
Private Const CRYPT_VERIFYCONTEXT As UInt32 = &HF0000000UI

Private Function GetHash(ByVal text As String) As Boolean
    Dim bResult As Boolean = False
    Dim hProv As IntPtr
    Dim hHash As IntPtr

    If CryptAcquireContext(hProv, vbNull, vbNull, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) Then
        If CryptCreateHash(hProv, CALG_SHA1, 0, 0, hHash) Then
            If CryptHashData(hHash, Encoding.ASCII.GetBytes(text), text.Length, 0) Then
                Dim bHash(20) As Byte
                Dim dwHashLen As Int32 = Marshal.SizeOf(bHash)
                bResult = CryptGetHashParam(hHash, HP_HASHVAL, bHash, dwHashLen, 0)
                If bResult = True Then
                    //Rest of string operations
                End If
            End If
        End If
    End If
    Dim errorMessage As String = New Win32Exception(Marshal.GetLastWin32Error()).Message
    MsgBox(errorMessage)
    Return bResult
End Function

你对我做错了什么有任何想法吗?

由于

0 个答案:

没有答案