问题标签 [cryptoapi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 加密 API <-> .NET RSA 互操作性
我有一个使用 Crypto API 生成 RC4 加密密钥的非托管应用程序。此非托管应用程序使用此 RC4 密钥加密某些数据。还有一个客户端非托管应用程序使用此 RC4 密钥来解密信息。
但是,对于这个客户端应用程序,我们正在发送一个会话密钥 -> 使用在客户端生成的 RSA 公钥(SIMPLEBLOB)加密的 RC4 密钥。加密会话密钥的生成过去是使用非托管代码完成的,但现在必须将其转换为 C#,因为需要在部分信任下从 Web 应用程序运行此代码。
密钥是使用生成的
它被导出到文件系统使用
(注意我能够使用这篇文章 http://www.codeproject.com/KB/security/plaintextsessionkey.aspx导出纯文本密钥)
客户端公钥是使用创建的
使用导出客户端公钥
会话密钥是在服务器端使用创建的
客户端公钥是使用导入的
CryptImportKey(hProv, lpData, nSize, NULL, 0, &hPublicKey
会话密钥是通过使用客户端公钥加密 RC4 生成 SIMPLEBOB 格式来生成的
CryptExportKey(hKey, hPublicKey, SIMPLEBOB, 0, lpData, &nSize);
现在我的要求是在托管版本中执行上述步骤(步骤 1 和 2),这就是我正在做的事情:
//读取使用代码项目文章提取的纯文本密钥数据 byte[] keyMaterial = File.ReadAllBytes(@"C:\keyMaterial.txt");
// 导入客户端公钥
这会生成与其非托管版本相同大小的数据,但它不会像非托管版本的第 1 步和第 2 步那样生成正确的 SIMPLEBLOB 会话密钥。我在这段代码中做错了什么?
cryptoapi - 将私钥关联到 PFXExportCertStoreEx 的证书
我正在尝试将证书导出到 pfx 文件。这是我所做的(简化):
PFX 创建,没有导出私钥。有人曾经将私钥导出到 pfx 吗?将私钥附加到证书以便导出的正确方法是什么?
cryptography - 带有 WinCrypt 和 CryptImportKey 的硬编码 AES-256 密钥
我需要让 Win32 应用程序加载硬编码的 AES-256 密钥,最好使用 WinCrypt.h 方法。我的密钥是无符号字符 [32],但我找不到要传递给 CryptImportKey 的密钥 blob 的正确格式。一切似乎都给了我无效的参数错误。有没有办法做到这一点?
(同样重要的是如何在 WinCrypt 中设置 IV。我根本不知道该怎么做)
c++ - cryptoapi 好用吗?
我正在编写一个加密程序,它执行诸如散列(sha1),加密,c++中win32的数字签名之类的东西是内置在cryptoapi安全中的,或者我应该使用像crypto++这样的其他库我需要最大的安全性并且适用于所有系统xp和vista(和可选的 2000),但同时我需要最小化 exe 大小,所以不想要不需要的外部库
encryption - PKCS#10 请求来自 PKCS#11 的对象密钥对
我有一个使用来自 PKCS#11 的标准调用生成的 RSA 1024 密钥对。我需要为公钥生成一个 PKCS#10 CSR。
MS 有 IEnroll4 dll,它允许使用 createRequestWStr 提出 CSR。示例表明您需要生成一个新的密钥对(一个在 MS CAPI 中具有 2 个对象的容器),并且 MS 会自动为 csr 生成提供公钥上下文。
就我而言,我已经有一个使用 pkcs#11 生成的密钥对(作为 2 个对象但没有密钥容器)。MS dll 不允许我继续进行。QUERY 1:有人能指出我如何解决这个问题吗? -------------------------------------------------- --------------------------
或者,我正在考虑根据 RSA 标准编写自己的 CSR 生成代码。我有 ASN 1.0 格式认证请求的 ASN.1 语法是:
QUERY 2: 如何使用上述语法?我对这种语法完全陌生?我需要查看哪些资源来编写自己的代码?
c# - CryptGetProvParam PP_ENUMCONTAINERS 只显示智能卡上的默认证书
我有 Gemalto.NET 智能卡。我使用使用sconnect
的 Gemalto 工具将 2 个证书导入其中(我怀疑在 IE 中使用时使用 Crypto API 来执行此操作)。
当我跑
我有以下结果
Microsoft 基础智能卡加密提供程序:
7c168bc3-dc1d-a627-c218-cd45729b42cb [默认容器] AT_KEYEXCHANGEbadd537a-a377-431b-cbc9-8699dbe15e0e AT_KEYEXCHANGE
LoadKeys 返回的 Key 不存在。0x8009000d (-2146893811) CertUtil: -key 命令成功完成。
现在我想在我的 C# 程序中找到这些键。为此,我编写了以下方法,该方法应返回特定智能卡上的所有密钥。
但我的方法只找到默认的密钥 7c168bc3-dc1d-a627-c218-cd45729b42cb。 我应该怎么做才能找到存储在智能卡上的所有密钥/容器?
然后
如何删除这些密钥并使用 C# 导入新密钥?
c++ - 将 PEM 编码的 X.509 证书加载到 Windows CryptoAPI
我需要将 PEM 编码的 X.509 证书加载到 Windows Crypto API 上下文中以与 C++ 一起使用。他们是那些拥有-----BEGIN RSA XXX KEY-----
和 的人-----END RSA XXX KEY-----
。我找到了 Python 和 .NET 的示例,但它们使用了与普通 Windows Crypto API 无关的特定功能。
一旦我有一个 HCRYPTKEY,我就知道如何加密/解密。但是,我只是不知道如何在 .PEM 文件中导入 Base64 blob 并从中获得HCRYPTKEY
我可以使用的。
我有一种奇怪的感觉,它不仅仅是打电话CryptDecodeObject()
。
有什么可以让我走上正轨的指针吗?我已经浪费了两天时间进行“试错”编程,但一无所获。
cryptography - 假人的cryptoapi
有人可以向我指出一些书籍或在线资源来帮助了解 windows cryptoapi 包吗?我确实找到了 Richard Bondi 的“Visual Basic 密码学”。我会对针对 C++ 或一般包的东西更感兴趣。MDSN 是压倒性的!
security - Microsoft CryptoAPI 的基本问题
我一直在浏览 MSDN 试图了解 crytoapi。下面是一些关于事情如何运作的问题和猜测。非常感谢任何答案或确认或反驳我的猜测。
根据我在http://msdn.microsoft.com/en-us/library/ms867086.aspx找到的说明,CSP 在会话之间保留公钥对。
在我看来,好像一个密钥容器可以包含:
它是否正确?容器关闭时非配对键是否被破坏?
创建/命名密钥容器的常用方法是什么?如何避免踩到其他应用程序容器?我需要一个带有公钥/私钥的容器,因此 cryptacquirecontext 的备注部分中提到的临时容器不适用。也许使用由一些固定部分加上序列号组成的创建名称。完成后可以删除容器。
cryptsignhash 指定使用签名或密钥交换私钥对散列进行签名。我想这意味着 cryptsignkey 将使用适当的 Alg_id 参数(值 CALG_RSA_KEYX 或 CALG_RSA_SIGN)找到由 cryptkeygen 创建的私钥。
如果我导出一个密钥,keyblob 是否包含说明它是什么类型的密钥的信息?
如果我导出 PUBLICKEYBLOB 并将其传输到其他环境。是否必须在新环境中导入该 blob 才能使用它来验证签名?cryptverifysignature 需要密钥的句柄,因此看起来必须首先导入它。导入 PUBLICKEYBLOB 是否会替换任何现有公钥/私钥对的公钥?我假设不是。
c++ - 使用 AES 和 CryptoAPI 解密?当你知道 KEY/SALT
好的,所以我打包了一个专有的二进制格式。这基本上是几个不同栅格数据集的松散包装。无论如何,过去只是阅读本文并打开包装是一件容易的事。但是现在在下一个版本中,光栅 xml 数据现在将使用 AES-256 加密(不是我的选择,我们也没有选择)。
现在我们基本上收到了 AES 密钥以及他们正在使用的 SALT,因此我们可以修改我们的解包器。
注意这些不是键,只是一个例子:
它们都是 63 字节长的 ASCII 字符:
我们基本上想使用 C++ CryptoAPI 来解密这个(我也是这周唯一的程序员,明天就会上线。不是我们的错)。我环顾四周寻找实现这一点的简单教程。不幸的是,我什至找不到他们分别拥有盐和密钥的教程。基本上,我现在真正拥有的只是一个接收 BYTE 数组的小函数。连同它的长度。我怎样才能做到这一点?
我早上大部分时间都在尝试制作cryptoAPI的正面/反面。但它并不顺利时期:(
编辑
所以我问他们如何加密它。他们使用 C#,并使用 RijndaelManaged,据我所知,这并不等同于 AES。
编辑2
好的,终于知道发生了什么,他们给我们发错了钥匙。
他们正在做以下事情:
Padding = PKCS7 CipherMode = CBC 密钥定义为一组 32 字节的十六进制。IV 也被定义为一组 32 字节的十六进制。
当我问他们时,他们拿走了盐。
使用 wincrypt.h 头文件在 CryptoAPI 中设置这些东西有多难?