Расшифровать данные, которые были зашифрованы с помощью 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
,