我需要存储 CryptUnprotectData 和 CryptProtectData 的密钥吗?

Posted

技术标签:

【中文标题】我需要存储 CryptUnprotectData 和 CryptProtectData 的密钥吗?【英文标题】:Do I need to store key for CryptUnprotectData and CryptProtectData? 【发布时间】:2014-06-24 12:11:43 【问题描述】:

DPAPI 有两个函数:CryptUnprotectDataCryptProtectData。 我读过They do the encryption or decryption by using a session key that the function creates by using the user's logon credentials. 这是否意味着我不需要将此密钥存储在任何地方,并且它们会在我想要加密或解密数据时创建? 我还发现An important point to remember is that DPAPI merely applies cryptographic protection to the data. It does not store any of the protected data; therefore applications calling DPAPI must implement their own storage of the protected data.这是关于密钥还是文件被加密?

【问题讨论】:

【参考方案1】:

上述功能使用特定于登录用户的密钥。因此,您不需要存储密钥。但是,这些功能仅用于数据转换,而不用于数据存储。这意味着将加密数据块存储在您想要的任何位置是您的工作 - CryptProtectData 不会为您执行此操作。

【讨论】:

谢谢。这是我需要的。但我还有一些问题。我需要存储 CryptEncrypt 和 CryptDecrypt 的密钥吗?如果我需要存储这个密钥,WIN API是否有存储它的功能? @user3186861 密钥派生自当前用户帐户的用户凭据。这意味着(a)您不需要存储密钥,并且(b)如果用户帐户丢失,数据也会丢失,因为密钥将随用户帐户一起消失。我不知道有什么方法可以备份密钥。 CryptEncrypt 和 CryptDecrypt 是否使用 CryptUnprotectData 和 CryptProtectData 等用户帐户? 我认为CryptEncrypt 和CryptDecrypt 使用由CryptGenKey 创建的密钥。 CryptExportKey 是否将 CryptGenKey 创建的密钥存储在 CSP 密钥数据库中?还是我需要存储密钥来加密自己? CryptGenKey 是另一回事 - 它可以生成一个对称密钥,您可以将其存储在其他地方并与 CryptEncrypt 一起使用。另一方面,*** 不是一个论坛,而是一个问答网站。应将一个(或几个紧密相关的)问题作为“新问题”提出并给出答案。评论是用来询问细节或小修正的,不是用来聊天的。如果您对 CryptEncrypt 有任何疑问,请发布新问题。

以上是关于我需要存储 CryptUnprotectData 和 CryptProtectData 的密钥吗?的主要内容,如果未能解决你的问题,请参考以下文章

chrome cookies cookie 解密 写入(80+版本)

双向加密:我需要存储可以检索的密码

双向加密:我需要存储可以检索的密码

需要一个持久的地方来存储我的核心数据存储的备份

源代码保存在 SVN 存储库中 - 我需要备份啥?

如果我不需要持久存储,那么以类似数据库的方式存储数据的最佳做法是啥? NSMutableArray?