Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CryptEncrypt为不同的语言提供不同的结果 当我在C++中(CryptEncrypt)运行这个代码时,在C中,或者VB6,在PBL中得到不同的结果!我唯一能想到的是CryptEncrypt是基于语言的,或者其他函数的参数是错误的。还有什么其他原因会发生这种情况?我是否向CryptDeriveKey传递了错误的参数 if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { if (CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) { if (CryptHashData(hHash, (BYTE *)szLocalPassword, _tcslen(szLocalPassword), 0)) { if (CryptDeriveKey(hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey)) { dwLength = sizeof(TCHAR)*_tcslen(sUnencryptedString); BYTE *pbBuffer = (BYTE *)malloc(dwLength); if (pbBuffer != NULL) { // Convert TCHAR to BYTE char c_szText[128] = {0}; // Any char SIZE_T so = wcslen(sUnencryptedString) + 1; wcstombs(c_szText, sUnencryptedString, so); memcpy(pbBuffer, c_szText, dwLength); if (CryptEncrypt(hKey, 0, TRUE, 0, pbBuffer, &dwLength, dwLength))_C#_C++_Vb6_Cryptoapi - Fatal编程技术网

C# CryptEncrypt为不同的语言提供不同的结果 当我在C++中(CryptEncrypt)运行这个代码时,在C中,或者VB6,在PBL中得到不同的结果!我唯一能想到的是CryptEncrypt是基于语言的,或者其他函数的参数是错误的。还有什么其他原因会发生这种情况?我是否向CryptDeriveKey传递了错误的参数 if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { if (CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) { if (CryptHashData(hHash, (BYTE *)szLocalPassword, _tcslen(szLocalPassword), 0)) { if (CryptDeriveKey(hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey)) { dwLength = sizeof(TCHAR)*_tcslen(sUnencryptedString); BYTE *pbBuffer = (BYTE *)malloc(dwLength); if (pbBuffer != NULL) { // Convert TCHAR to BYTE char c_szText[128] = {0}; // Any char SIZE_T so = wcslen(sUnencryptedString) + 1; wcstombs(c_szText, sUnencryptedString, so); memcpy(pbBuffer, c_szText, dwLength); if (CryptEncrypt(hKey, 0, TRUE, 0, pbBuffer, &dwLength, dwLength))

C# CryptEncrypt为不同的语言提供不同的结果 当我在C++中(CryptEncrypt)运行这个代码时,在C中,或者VB6,在PBL中得到不同的结果!我唯一能想到的是CryptEncrypt是基于语言的,或者其他函数的参数是错误的。还有什么其他原因会发生这种情况?我是否向CryptDeriveKey传递了错误的参数 if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { if (CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) { if (CryptHashData(hHash, (BYTE *)szLocalPassword, _tcslen(szLocalPassword), 0)) { if (CryptDeriveKey(hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey)) { dwLength = sizeof(TCHAR)*_tcslen(sUnencryptedString); BYTE *pbBuffer = (BYTE *)malloc(dwLength); if (pbBuffer != NULL) { // Convert TCHAR to BYTE char c_szText[128] = {0}; // Any char SIZE_T so = wcslen(sUnencryptedString) + 1; wcstombs(c_szText, sUnencryptedString, so); memcpy(pbBuffer, c_szText, dwLength); if (CryptEncrypt(hKey, 0, TRUE, 0, pbBuffer, &dwLength, dwLength)),c#,c++,vb6,cryptoapi,C#,C++,Vb6,Cryptoapi,这是一段VB代码,它演示了如何将正确的信息传递给Crypto API,以便在VB6中加密字符串。希望有人可以在搜索时使用此信息 ... Dim bKeyRoot() As Byte bKeyRoot = StrConv(sKeyRoot, vbFromUnicode) lResult = CryptHashData(hHash, bKeyRoot(0), Len(sKeyRoot), 0) ... Dim bText() As Byte bText = StrConv(sText, vbFrom

这是一段VB代码,它演示了如何将正确的信息传递给Crypto API,以便在VB6中加密字符串。希望有人可以在搜索时使用此信息

...
Dim bKeyRoot() As Byte
bKeyRoot = StrConv(sKeyRoot, vbFromUnicode)
lResult = CryptHashData(hHash, bKeyRoot(0), Len(sKeyRoot), 0)
...
Dim bText() As Byte
bText = StrConv(sText, vbFromUnicode)
lResult = CryptEncrypt(lKey, 0, 1, 0, bText(0), lClear, lData)
sText = StrConv(bText, vbUnicode)

请描述“不同结果”的含义。您必须向我们展示如何将其转换为其他语言。例如,这个问题可能与字符集有关。(VB6和C#中的字符串类型包含字符,而不是字节,因此在对
CryptEncrypt()
调用进行封送处理时,它们的解释可能会有所不同。)我的猜测可能与字符编码有关。例如,默认情况下,C#使用UTF-16对字符串进行编码。VB6在内部和使用对象时也使用UTF-16。但在API调用中,VB6将UTF-16转换为ANSI。因此,您需要调用函数的A版本,或者将字节数组而不是字符串传递给W版本。如果所有API函数获取或返回字符串,则它们都有A或W版本。如果确实要传递UTF-16,则将
stringvar)
传递给
Long
API参数。我不相信大多数加密API入口点都有A和W两种风格。