0

有谁知道为什么这段代码不起作用?

 #include "stdafx.h"
#include <windows.h>
#include <WinCrypt.h>


int _tmain(int argc, _TCHAR* argv[])
{
wchar_t *bin = TEXT("ProductID:1233===>55555");
BYTE out2[1000];
DWORD olen;
olen = 1000;

if (CryptStringToBinary(bin, 0, 1, out2, &olen, 0, 0) == 0)
{
    wprintf(TEXT("Failure\n"));
}
else
{
//wprintf(TEXT("rn%s\n"),out2);
    wprintf(TEXT("Success\n"));
}
system("pause");
    return 0;
}

非常感谢您!

汤姆

4

1 回答 1

1

因为您指定的长度(参数 2)为 0?

编辑:为了在下面的评论中澄清我们的最终解决方案,原始问题中的代码(自编辑后)包含两个错误:

  1. 它正在调用CryptBinaryToString而不是CryptStringToBinary. 由于将第二个参数中的 0 传递给 是无效的CryptBinaryToString,因此该函数失败了。
  2. 它在第三个参数 (dwFlags) 中传递了 1,它被解释为CRYPT_STRING_BASE64. 由于要加密的字符串不在 base 64 中(它包含无效字符,例如 ':'),因此函数失败。通常,传递原始值而不是使用现有定义(例如,CRYPT_STRING_BASE64)不是一个好主意。
于 2010-07-04T17:58:59.967 回答