未定义键集[重复]

Posted

技术标签:

【中文标题】未定义键集[重复]【英文标题】:The keyset is not defined [duplicate] 【发布时间】:2017-11-22 10:05:56 【问题描述】:

我正在通过 C# .NET 构建一个用于文档签名的应用程序(win 表单)。我在签名时遇到了错误。当我在某些计算机(Windows 7、Windows 10,不在 Windows Server 中)上签署文档时,出现错误:“未定义密钥集”。 那么,有人可以指导或建议我如何解决这个问题?非常感谢! 这是我的代码: // get certficate public X509Certificate2 LoadCertificateFromWindowsStore() X509Store x509Store = new X509Store(StoreName.My, StoreLocation.CurrentUser); try x509Store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); X509Certificate2Collection numberCerts = (X509Certificate2Collection)x509Store.Certificates; X509Certificate2Enumerator certEnumerator; if (numberCerts.Count == 1) certEnumerator = numberCerts.GetEnumerator(); while (certEnumerator.MoveNext()) return certEnumerator.Current; return null; else if (numberCerts.Count > 1) X509Certificate2Collection chooseCert = X509Certificate2UI.SelectFromCollection(numberCerts, "Certificates List", "Choose your certificate", X509SelectionFlag.SingleSelection); if (chooseCert.Count == 1) return chooseCert[0]; else return null; else return null; catch (CryptographicException e) Console.WriteLine(e.Message); finally x509Store.Close(); return null; // using the cert to sign var cert = LoadCertificateFromWindowsStore(); if (cert.HasPrivateKey) // WORKS!!! signedXml.SigningKey = cert.PrivateKey; // THROW "keyset does not exist" EXCEPTION ...

【问题讨论】:

这不是建议问题的重复。 “Keyset 不存在”和“Keyset 未定义”是 2 个不同的错误代码,出现的原因有 2 个。正如建议的副本所示,“密钥集不存在”通常是权限问题。但是,当无法加载包含密钥的加密服务提供程序时,可能会出现“未定义密钥集”。正如下面的答案所示,这有时可能是由程序和 CSP 之间的 32/64 位不匹配引起的。 【参考方案1】:

我已经解决了这个错误。这很容易。您选择“平台目标”为 x86。

右击你的项目->属性->构建->平台目标->x86

问候,

【讨论】:

非常感谢!我会测试这个! 更一般地说,问题是程序的位数与 CSP 的位数不匹配。在某些情况下,更改平台目标就足够了,但在其他情况下,问题可能在于使用具有正确位数的 CSP。例如,nCipher CSP 有单独的 32 位和 64 位版本。

以上是关于未定义键集[重复]的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的 ReferenceError:$ 未定义 [重复]

未捕获的 ReferenceError:“$ 未定义”[重复]

变量是不是未定义[重复]

变量是不是未定义[重复]

无法连接到本地 PHP 站点(未定义索引和未定义变量错误)[重复]

错误“未捕获的 ReferenceError:$ 未定义”[重复]