首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DPAPI存储RijndaelManaged密钥

使用DPAPI存储RijndaelManaged密钥
EN

Stack Overflow用户
提问于 2016-08-22 19:46:47
回答 1查看 243关注 0票数 0

我在用C#。

我有一个大小为256字节的私钥,

我试图使用DPAPI,如下所示:

代码语言:javascript
复制
  RijndaelManaged key = new RijndaelManaged();
  byte[] buffer = new byte[32]
        {
                3,3,3,3,3,3,3,3,
                5,5,5,5,5,5,5,57,
                6,7,8,8,8,8,8,3,
                1,33,36,39,39,39,31,37
        };

        byte[] secret = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

        // Encrypt a copy of the data to the stream.
        byte[] output = ProtectedData.Protect(buffer, secret, DataProtectionScope.CurrentUser);
        key.Key = output;//Throw an exception

我的问题是,从output返回的ProtectData.Protect数组的大小不支持key.Key (178个字节),而且当我试图将output插入到RijndaelManaged键时,我得到了一个例外:

'System.Security.Cryptography.CryptographicException‘发生在mscorlib.dll 附加信息:指定的密钥不是此算法的有效大小。

我该怎么解决呢?或者任何其他解决方案来存储我的RijndaelManaged密钥?

我还想从另一个进程访问我的私钥。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-08-23 05:44:26

ProtectedData.Protect的输出是加密的(不是加密密钥)。它增长到存储任何上下文和完整性检查,它需要证明它可以正确解密。要获得原来的256位密钥,您需要调用Unprotect

如果您试图派生密钥(而不是加密密钥),请使用密钥派生例程,如PBKDF2 (在.NET中,这是由Rfc2898DeriveBytes实现的)。

或者,如果您试图使用DPAPI来保护数据,它本身就是这样做的;您不能为它定制密钥.把要保护的数据传递给它。

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

https://stackoverflow.com/questions/39087561

复制
相关文章

相似问题

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