首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DPAPI的安全加密密钥

使用DPAPI的安全加密密钥
EN

Stack Overflow用户
提问于 2011-02-11 17:57:26
回答 1查看 718关注 0票数 0

我正在编写一个加密敏感数据的asp.net应用程序,该应用程序由同一域中不同用户帐户上运行的另一个asp.net应用程序解密。

我读了很多文章,说使用DPAPI将密钥管理传递到操作系统级别。

如何在此场景中使用DPAPI?我不想将加密密钥存储在文件或数据库中。

EN

回答 1

Stack Overflow用户

发布于 2011-02-11 18:14:48

您需要引用System.Security,并拥有类似于此的代码(它是VB.NET,但它被简单地移植到C#):

代码语言:javascript
复制
Imports System.Security.Cryptography 

' ....

Dim sensitiveDataBytes() As Byte = Encoding.Unicode.GetBytes(sensitiveData)
Dim entropy As Byte() = Guid.NewGuid().ToByteArray()
Dim encryptedSensitiveDataBytes() As Byte = ProtectedData.Protect(sensitiveDataBytes, entropy, DataProtectionScope.LocalMachine)
Dim entropyPlusSensitiveData As Byte() = entropy.Concat(encryptedSensitiveDataBytes).ToArray()

Return entropyPlusSensitiveData

您在这里所做的是使用System.Security.Cryptography.ProtectedData来使用DPAPI来保护具有“本地机器”作用域的数据,然后创建一些随机的16字节熵,并将其添加到加密数据的前面。然后,您可以安全地传递16+(加密数据长度)-sized数组。

在解密方面,您可以使用类似的技巧:剥离16个熵字节,然后使用DPAPI进行解密:

代码语言:javascript
复制
Dim entropyPlusSensitiveData As Byte() = data ' the byte array created previously
Dim entropy() As Byte = entropyPlusSensitiveData.Take(16).ToArray()
Dim encryptedSensitiveDataBytes() As Byte = entropyPlusSensitiveData.Skip(16).ToArray()
Dim sensitiveDataBytes() As Byte = ProtectedData.Unprotect(encryptedSensitiveDataBytes, entropy, DataProtectionScope.LocalMachine)

熵并不是严格要求的,但强烈建议使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4967657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档