2011-05-17 45 views
13

Microsoft Windows 2000和更高版本公开了为每个用户或每个系统上下文加密数据的Data Protection API(DPAPI)。调用者不提供用于加密数据的密钥。相反,数据使用从用户或系统证书导出的密钥进行加密。Linux上Data Protection API的等效

该API方便地通过ProtectedData类暴露在.NET:

// Encrypts the data in a specified byte array and returns a byte array 
// that contains the encrypted data. 
public static byte[] Protect(
    byte[] userData, 
    byte[] optionalEntropy, 
    DataProtectionScope scope 
) 

// Decrypts the data in a specified byte array and returns a byte array 
// that contains the decrypted data. 
public static byte[] Unprotect(
    byte[] encryptedData, 
    byte[] optionalEntropy, 
    DataProtectionScope scope 
) 

是否有在Linux上的等效API?一个好处是它可以方便地与Java集成。

如果没有我的替代品,我的替代品是什么?

回答

2

它看起来没有任何更多(或更少)高于PGP或Pretty Good Privacy。有PGP可用的API,我记得其他人友好的是Bouncy Castle

这里是example of how someone used Bouncy Castle

根据您的具体需求,可能会提供更好的API或解决方案。

+0

PGP是否利用用户或系统证书?我的理解是,对于PGP,您需要提供您自己的公钥/私钥对。 – 2011-05-17 15:16:48

+0

DPAPI中的证书只是一个RSA公钥/私钥对,您认为您属于哪个关键(系统或用户)是您自己的看法,而不是关键的功能。 – 2011-05-17 15:18:32

+2

@EdwinBuck“由于DPAPI专注于为用户提供保护,并需要密码才能提供此保护,它在逻辑上使用用户的登录密码进行保护。”这里的问题是你没有访问用户登录密码,但该功能为你提供了加密,密码是关键。这让你不用担心其他用户(甚至是root用户)可以访问你的数据(在Linux情况下,用户当前没有登录的额外警告)。 – chacham15 2013-05-11 01:34:12

2

Linux上有用户级的密钥存储两个选项:

这并没有解决一个系统级的密钥存储的需要。

+1

-1,因为虽然这些与用户帐户绑定,但它们不是DPAPI的Linux替代品。请参阅http://msdn.microsoft.com/en-us/library/ms995355.aspx – 2014-04-16 17:48:24

+0

@rob,你能否详细说明为什么它们不是“DPAPI的替代品”?它们可能在体系结构上有所不同,但它们实现相同的目标:允许应用程序安全地存储信息,而无需考虑用户身份验证。 – deGoot 2014-07-21 19:18:55