Расшифровать данные, которые были зашифрованы с помощью MS DPAPI с JNA

Можно ли расшифровать данные, которые были зашифрованы с помощью MS DPAPI? Например, я хочу расшифровать цифровой сертификат из реестра Windows.

byte[] byteArray = (byte[]) Advapi32Util.registryGetValue(WinReg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\SystemCertificates\\AuthRoot\\Certificates\\02FAF3E291435468607857694DF5E45B68851868", "Blob");

byte[] decrypted = Crypt32Util.cryptUnprotectData(byteArray);

String stringDecrypted = new String(decrypted);
System.out.println(stringDecrypted);

Но я получаю Win32 Exception: исключение в потоке "main" com.sun.jna.platform.win32.Win32Exception: данные недействительны.

Я не нашел никакой информации об этом исключении. Так что же это значит?? И могу ли я расшифровать эти файлы так, как хочу, или это невозможно?

Спасибо за помощь!

1 ответ

Решение

Согласно документации MSDN, вам не хватает шести дополнительных аргументов cryptUnprotectData,

Даже если эти аргументы помечены как "необязательные", вам все равно нужно объявить их в сигнатуре метода интерфейса.

ОБНОВИТЬ

На основании документации MSDN:

BOOL WINAPI CryptUnprotectData(
  _In_        DATA_BLOB *pDataIn,
  _Out_opt_   LPWSTR *ppszDataDescr,
  _In_opt_    DATA_BLOB *pOptionalEntropy,
  _Reserved_  PVOID pvReserved,
  _In_opt_    CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
  _In_        DWORD dwFlags,
  _Out_       DATA_BLOB *pDataOut
);

Второй, третий, четвертый и пятый аргументы, вероятно, могут быть null, Шестой аргумент, вероятно, может быть нулевым. Последний аргумент должен быть соответствующим образом распределен DATA_BLOB где функция может хранить свои результаты (эта структура определена в JNA platform.jar). Не забудьте освободить DATA_BLOB "s pbData поле, когда вы закончите, передавая его значение LocalFree,

Другие вопросы по тегам