[ad_1]
しばらくの間、暗号化された文字列 (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 アプリ | マイクロソフト ラーン[^] – 入力と出力の両方に同じデータ ブロブを渡していますが、これが問題になる可能性が非常に高いと思われます。
[ad_2]
コメント