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に指定したので?

編集:以下のコメントで最終的な解決策を明確にするために、元の質問のコード(編集後)には2つのエラーが含まれていました:

  1. CryptBinaryToStringの代わりに呼び出していましたCryptStringToBinary。2番目のパラメーターの0をに渡すことは無効であるためCryptBinaryToString、関数は失敗していました。
  2. 3番目のパラメーター(dwFlags)で1を渡していました。これは、として解釈されCRYPT_STRING_BASE64ます。暗号化する文字列がbase64に含まれていなかったため(「:」などの無効な文字が含まれていました)、関数は失敗していました。一般に、既存の定義(たとえば)を使用する代わりに生の値を渡すことCRYPT_STRING_BASE64はお勧めできません。
于 2010-07-04T17:58:59.967 に答える