【解決方法】暗号化されていない文字列を返す Cryptunprotectdata。


しばらくの間、暗号化された文字列 (DPAPI) を c++ で復号化しようとしていますが、理解できないようです。 現在、CryptUnprotectData 関数を使用して文字列を復号化しようとすると、関数に入力した暗号化されていない文字列しか返されません。 これが私のコードです:

<pre>#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
#include <string>
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;

#define MY_ENCODING_TYPE  (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)

#pragma comment (lib, "Crypt32.lib")

int main()
{

    string data = ("data I want to decode \n");
    cout << data;

    LPWSTR pDescrOut = NULL;


    DATA_BLOB DataBytes;
    BYTE* pbDataOutput = (BYTE*)data.data();
    DWORD cbDataOutput = strlen((char*)pbDataOutput) + 1;
    DataBytes.pbData = pbDataOutput;
    DataBytes.cbData = cbDataOutput;

    HRESULT res = CryptUnprotectData(
        &DataBytes,
        NULL,
        NULL,                 // Optional entropy
        NULL,                 // Reserved
        NULL,                 // Here, the optional
        // prompt structure is not
        // used.
        0,
        &DataBytes);

        printf("The decrypted data is: %s\n", DataBytes.pbData);



    LocalFree(pDescrOut);

}

どんな助けでも大歓迎です。

私が試したこと:

関数のドキュメントからいくつかのコードを削ってみました ここ しかし、暗号化機能を削除すると機能しなくなるだけです。

解決策 1

呼び出しによって何が返されるかを確認することから始めます。復号化が行われなかったことを示す False だと思います。

理由を推測する必要がある場合は、実際に期待されるパラメーターを確認することから始めて、次のように指定します。 CryptUnprotectData 関数 (dpapi.h) – Win32 アプリ | マイクロソフト ラーン[^] – 入力と出力の両方に同じデータ ブロブを渡していますが、これが問題になる可能性が非常に高いと思われます。

コメント

タイトルとURLをコピーしました