- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将一个旧的 VB6 应用程序移植到 .NET,但从昨天下午开始我就遇到了一些 CryptoAPI 调用的问题。
特别是我无法检索已定义的 key 容器。我使用 CryptAcquireContext()
函数。我在创建容器的地方使用了一些测试代码。然后,如果我转到 C:\Users...\Roaming\Microsoft\Crypto\RSA\Machine Keys\
,我可以看到一个用我定义的容器名称创建的文件,所以我假设它已成功创建。
尝试创建相同容器的后续调用验证了该假设,因为我收到 win32 错误,指出键集已定义。
无论如何,在我尝试检索已创建的容器的下一个代码调用中,我收到未定义键集的 Windows 错误。
Error : -2146893799 (80090019) The keyset is not defined.
有什么想法吗?
这是一个代码示例:
public const uint PROV_RSA_FULL = 1;
public const uint CRYPT_NEWKEYSET = 0x00000008;
public const uint CRYPT_MACHINE_KEYSET = 0x00000020;
const string MS_DEF_PROV = "Microsoft Base Cryptographic Provider v1.0";
[DllImport("advapi32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool CryptAcquireContext(out IntPtr phProv, string pszContainer, string pszProvider, uint dwProvType, uint dwFlags);
public static void CreateContainer()
{
IntPtr hCryptProv;
int error;
if (!CryptAcquireContext(out hCryptProv, "new", MS_DEF_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET))
{
error = Marshal.GetLastWin32Error();
}
if (!CryptAcquireContext(out hCryptProv, "new", MS_DEF_PROV, PROV_RSA_FULL, CRYPT_MACHINE_KEYSET))
{
error = Marshal.GetLastWin32Error();
}
}
最佳答案
您正在为该用户创建 key 容器,但试图从基于机器的存储中获取它。要解决此问题,您需要将 CRYPT_MACHINE_KEYSET
更改为 0,或者在创建 key 集时使用 CRYPT_NEWKEYSET | CRYPT_MACHINE_KEYSET
根据您的需要。
By default, keys and key containers are stored as user keys. For Base Providers, this means that user key containers are stored in the user's profile. A key container created without this flag by an administrator can be accessed only by the user creating the key container and a user with administration privileges.
有关详细信息,请查看下面的链接。
关于c# - CryptoAPI AcquireContext 无法检索 key 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15945218/
我希望使用 PKCS #11 接口(interface)运行一些测试,并且想知道 Microsoft 是否提供了基于软件的实现来提供 PKCS #11 功能? 与其等待 HSM 到达并正确配置,我宁愿
我使用 CertCreateSelfSignCertificate 生成了一个自签名证书功能。这会产生一个 PCCERT_CONTEXT。 如何仅使用公钥导出存储在 PCCERT_CONTEXT 变量
我有在 Windows 平台中使用的密码代码,它使用 Crypto API 函数,需要将其转换为在 OS X 上使用 Common Crypto。 基本上原始代码是这样的,为简洁起见删除了错误检查:-
我正在编写一个加密程序,它可以在 C++ 中为 win32 执行散列 (sha1)、加密、数字签名等操作内置于 cryptoapi secure,或者我应该使用其他一些库,如 crypto++我需要最
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 10年前关闭。 Improve this
我正在尝试将证书导出到 pfx 文件。这就是我所做的(简化): h = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, NULL, CERT_STORE_CREATE
我正在尝试使用“Microsoft RSA SChannel Cryptographic Provider”生成数字签名。获取容器句柄后,我使用 CryptGenKey() 生成签名。但这个函数返回F
如何使用 cryptoapi 获取十六进制格式字符串的证书序列号?我尝试使用 LPTSTR pszSerial = NULL; DWORD cbSerial = 0; CryptBin
我正在尝试使用 128 位 AES 解密来解密某些内容。当我尝试调用 CryptDecrypt 时,我收到一条错误消息,指出“指定的算法无效”。使用此处发布的库时遇到同样的问题:http://www.
我正在尝试使用 CryptoApi 向证书请求添加扩展。这是我使用的代码: char extensionValue[] = "testValue"; _CRYPTOAPI_BLOB myBlob =
我在 Windows keystore 中创建了 RSA key 对。 我成功加密数据(对称 key ): HCERTSTORE hstore = ::CertOpenSystemStore(NULL
我尝试用 cryptoapi 编写 Linux 内核模块。我找到了一些这样的例子:https://codedream.me/2014/04/cryptoapi-linux-kernel/ 这个例子对我
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
使用 CryptoAPI,有没有办法解密(使用 CryptDecrypt)写入 SYMMETRICWRAPKEYBLOB 的 key ?在我的 C++ 程序中,我将一个对称 key k1 和另一个对称
我将下面的代码与 Crypto API 一起使用,但根据其他 API 和库的测试,我没有得到预期的结果。 我使用的是 key “key”,数据是“message” 例如,使用 Indy 的 TidHM
我有一个 Spring 集成应用程序,在使用 jdk1.8.0_151-X64 的 Windows (Windows Server 2012 R2) 上启动时失败,但出现以下异常: INFO [mai
我想将公钥 blob 导入到 CSP。但发生错误。 BYTE pbData[] ={0xEB,0x2A,0x38,0x56,0x86,0x61,0x88,0x7F,0xA1,0x80,0xBD,0xD
我有一些问题。我需要使用 CryptoAPI 生成和导出对称 key 。 if(CryptAcquireContext(&hCryptProv_AES, NULL, MS_ENH_RSA_A
使用 Microsoft CryptoAPI,我生成了一个新的 RSA key 对,现在正尝试将私钥导出到 PKCS#8 加密(受密码保护)的 PEM 文件。 我先研究了CryptExportPKCS
在 C# 中,我可以使用 public static CspKeyContainerInfo GetKeyConatinerInformation(X509Certificate2 certifica
我是一名优秀的程序员,十分优秀!