繁体   English   中英

使用DPAPI存储RijndaelManaged密钥

[英]Using DPAPI to store RijndaelManaged key

我正在使用C#。
我有一个256个字节的私钥,

我正在尝试使用DPAPI ,如下所示:

  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

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

mscorlib.dll中发生了'System.Security.Cryptography.CryptographicException'

附加信息:指定的密钥不是此算法的有效大小。

我该如何解决? 或任何其他解决方案来存储我的RijndaelManaged密钥?

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

谢谢。

ProtectedData.Protect的输出已加密(不是加密密钥)。 它可以存储任何需要证明可以正确解密的上下文和完整性检查。 要取回原始的256位密钥,您需要致电Unprotect

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

另外,如果您尝试使用DPAPI保护数据,则它会内在地做到这一点。 您无需为其自定义密钥...只需将其传递给数据进行保护。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM