Tag: advapi32

使用Pinvoke调用advapi.dll:CryptDecrypt和CryptEncrypt意外行为

这是这个问题的后续行动。 我从VB.net调用WinAPI Cryptography函数以确保与共享结果数据的旧产品兼容。 该代码运行良好多年,但是我最近在Windows Server 2012上运行时遇到了问题。在看了各种示例和我之前的问题的答案后,我给了代码一个大修,包括改变以前的字符串变量为Byte数组,我认为这是更正确的function。 以前它如何使用字符串我不知道,但在修复原始的Server 2012问题之后,由于字符串的NTE_BAD_LENGTH而失败了。 现在,在将字符串转换为字节数组之后,代码似乎不会像以前那样加密,也不会解密CryptEncrypt生成的内容。 代码的主要部分如下: (调用CryptCreateHash,CryptHashData,CryptDeriveKey在此之前) Dim _encoding As System.Text.ASCIIEncoding = New System.Text.ASCIIEncoding() Dim data As String = “Testing123″ ”define test String Debug.WriteLine(“Test Data: ” & data) ”convert data to Byte() Dim _bigBuffer As Byte() = New Byte(127) {} ”Buffer to be encrypted Dim _dataBuffer As Byte() = _encoding.GetBytes(data) ”Get […]

在服务器2012上使用MS加密库 – CryptCreateHash错误代码87:ERROR_INVALID_PARAMETER

我试图在新的Windows Server 2012环境中托管Web应用程序,但是我收到了一个未经证实的错误。 此代码已存在于我们的代码库中多年,并且在任何其他平台上都没有遇到任何问题。 有问题的代码调用advapi32.dll的CryptCreateHash函数 – 一个Microsoft加密库。 调用函数时,我返回0表示调用失败,随后Err.LastDllError返回错误代码87,即ERROR_INVALID_PARAMETER。 正如我之前所说的,这段代码在各种环境中都运行了很多年 – 包括开发人员使用的Windows Server 2012测试机。 但是当放在也运行Server 2012的实时环境时(尽管在负载平衡系统的稍微复杂的上下文中),我收到错误。 这两台服务器都没有更新到Windows Server 2012 R2,它运行的是开箱即​​用的操作系统版本。 使用以下命令创建Crypt Provider的句柄后: CryptAcquireContext(hCryptProv, vbNullString, SERVICE_PROVIDER, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) 我使用hCryptProv来调用CryptCreateHas函数。 If CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, hHash) = 0 Then Dim _error As Integer = Err.LastDllError Throw New CryptoException(“Error during CryptCreateHash. Error Code: ” & _error.ToString) End If 从live和dev环境传递给该方法的数据的一些示例: […]

我成功地从C#调用了advapi32的LsaEnumerateAccountRights()。 现在我如何解组它返回的LSA_UNICODE_STRING数组呢?

它是指向LSA_UNICODE_STRING结构数组的指针。 我找到了一些反向的代码,即从C#字符串创建一个LSA_UNICODE_STRING 。 您可以在下面的帮助程序代码部分中看到。 我所做的包括对LsaEnumerateAccountRights()的调用似乎工作得很好。 为数组指针和计数返回合理的值。 我不知道如何处理那些爆炸的字符串。 请帮忙? 好吗? 更新: nobugz的帮助函数在下面的答案中几乎是正确的,你只需UnicodeEncoding.CharSize来划分长度。 多亏了他,我现在可以在数组中看到FIRST字符串。 请参阅下面两个代码部分末尾的更新。 现在,我是如何做地狱世界的指针运算? 更新2.5:查看function代码的答案。 我丢失了旧的“错误”代码。