使用DPAPI存储RijndaelManaged密钥

本文关键字:密钥 RijndaelManaged 存储 DPAPI 使用 | 更新日期: 2023-09-27 18:03:41

我正在使用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键时,我得到了一个例外:

System.Security.Cryptography。

mscorlib.dll

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

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

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

谢谢。

使用DPAPI存储RijndaelManaged密钥

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

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

或者,如果你试图使用DPAPI来保护数据,它本身就是这样做的;你不能为它定制一个键…