相当于Linux上的Data Protection API

时间:2011-05-17 15:04:42

标签: java .net windows linux security

Microsoft Windows 2000及更高版本公开了Data Protection API(DPAPI),它为每个用户或每个系统的上下文加密数据。呼叫者不提供用于加密数据的密钥。而是使用从用户或系统凭证派生的密钥对数据进行加密。

此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集成。

如果没有,我有什么选择?

3 个答案:

答案 0 :(得分:2)

它看起来不比PGP或Pretty Good Privacy更高级(或更低)。有可用于PGP的API,我记得其他人友好的是Bouncy Castle

这是一个example of how someone used Bouncy Castle

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

答案 1 :(得分:2)

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

这并不能满足系统级密钥库的需求。

答案 2 :(得分:0)

DPAPI 在 Linux 上不存在。

Windows 使用特殊的机器 ID 来偏离机器密钥。您可以通过查看“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid”读取此密钥并使用您想要的任何加密库偏离您的特殊密钥来模拟此行为。

另一方面,在 Linux 下,此机器 ID 存储在文件“/etc/machine-id”中。您可以阅读它的内容并从中偏离您的特殊键。请注意,使用快速部署 VM 时,此密钥可能相同。

用这个特殊的机器 ID 加密你的数据,它不能被其他机器读取。首先读取机器 ID(Linux 或 Windows),然后尝试解密数据内容。在另一台机器上,结果显然会不同并且不正确。

您可以使用上面的信息编写独立于平台的包装类。

希望这对未来的人有所帮助。

干杯