【问题标题】:Decrypt Data which was encrypted with MS DPAPI with JNA使用 JNA 解密使用 MS DPAPI 加密的数据
【发布时间】:2014-12-03 17:34:17
【问题描述】:

是否可以解密使用 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 异常:线程“主”com.sun.jna.platform.win32.Win32Exception 中的异常:数据无效。

我没有找到有关此异常的任何信息。所以这是什么意思??我可以像我想要的那样解密这些文件还是不可能?

感谢帮助!

【问题讨论】:

    标签: java windows encryption jna dpapi


    【解决方案1】:

    根据MSDN documentation,您缺少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_BLOBpbData 字段,将其值传递给LocalFree

    【讨论】:

    • 以及我需要添加的确切参数是什么。我认为参数必须是使用 DPAPI 加密数据的参数。但我没有发现他们使用的确切参数。所以找到我需要的论点有点困难
    • 问题是JNA函数cryptUnprotectData()只接受这些参数:byte[] data OR byte[] data, byte[] entropy, int flags, WinCrypt.CRYPTPROTECT_PROMPTSTRUCT prompt OR byte[] data , int flags see here (jna.java.net/javadoc/platform/com/sun/jna/platform/win32/…) 所以我不知道我必须在那里设置哪些值:(
    • 根据 the latest on github, cryptUnprotectData() 匹配 MSDN 上的文档。 jna.java.net 多年未使用。
    • 您能否仅使用本机代码解除对数据的保护?
    • 我发现我的用法和你的用法有一个区别:我使用的是 Crypt32Util,你只提到了 Crypt32。但 Crypt32 只是一个接口。所以我必须自己实现它还是我错了?我不是最好的程序员 :( 你到底是什么意思:我能够解除对本机代码的数据保护?
    猜你喜欢
    • 1970-01-01
    • 2016-03-15
    • 2012-10-05
    • 1970-01-01
    • 2014-03-09
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    相关资源
    最近更新 更多