问题标签 [rsacryptoserviceprovider]

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.

0 投票
1 回答
1750 浏览

c# - 使用 C#/CSP 在 HSM 中使用不可导出密钥进行 RSA 加密

我正在尝试使用这段代码在 C# 中使用 RSA(CSP 中的交换密钥)加密对称密钥(RSA 密钥 CSP50C8C7CD 不可导出,它在 HSM 中):

看到 CSP 日志,我注意到 C# 正在尝试导出密钥以继续操作。下面的 CSP 日志仅显示有关rsa_dnet.Encrypt使用的部分:

Windows SO 调用 CryptExportKey 传递 PRIVATEKEYBLOB 意味着导出私钥。

在 HSM 中,此日志显示 Windows SO 正在尝试提取私钥(这意味着 ERRO,因为该密钥不可导出)。

当我在 HSM 中使用可导出密钥 CSP50C8C7CE 时,日志显示一切正常:

请注意,此日志显示了许多 RSA 密钥导入/导出操作(参考:CSP50C8C7CE - 可导出密钥)。

问题: 库 System.Cryptography 中的 Encrypt 函数需要密钥必须始终可导出?或者我在我的程序中犯了任何错误?可能有任何遗漏的参数吗?

0 投票
1 回答
2924 浏览

c# - 加密异常 指定的标志无效

这是我的代码:

我只是不断收到相同的错误“指定的标志无效”。如果我使用无参数构造函数,则不会引发异常并且密钥大小为 1024。

0 投票
1 回答
1491 浏览

c# - 使用 RSACryptoServiceProvider 加密时如何定义哈希大小?

可能重复:
RSACryptoServiceProvider(.NET 的 RSA)可以使用 SHA256 进行加密(不是签名)而不是 SHA1 吗?

RSACryptoServiceProvider用于加密时,默认的哈希算法显然是SHA-1. 如何SHA-512在加密数据时定义另一种哈希算法(使用该Encrypt方法)?我没有找到与哈希算法相关的任何属性。

0 投票
1 回答
660 浏览

c++ - 在其他计算机中导入 RSA 密钥的问题

我正在创建一个使用一对密钥(公钥和私钥)进行加密和解密的小工具。我在我的计算机上导出公钥和私钥,我可以毫无问题地加密和解密文件。当我尝试使用相同的公钥解密其他机器中的文件时遇到问题。

在密钥软件创建应用程序的同一台计算机上正确加密和解​​密,但如果我尝试在其他计算机上解密文件,CryptDecrypt() 失败并出现错误 80090003(GetLastError() 得到的错误)知道吗?我究竟做错了什么...?如何将公钥导出到其他计算机?谢谢!

0 投票
2 回答
1775 浏览

cryptography - 鉴于我只有 p、q、d 和 u,如何使用 RSACryptoServiceProvider 解密?

我正在创建一个简单的客户端应用程序来试验Mega,但我无法理解 RSA 的使用方式。让我们以会话 ID 的解密为例——这是登录时必须完成的第一件事。

API 为我提供了以下 RSA 数据:

  • p(1024 位)
  • q(1024 位)
  • d(2044 位)
  • u(1024 位)

首先,我不知道“u”代表什么。我从代码中看到它是通过以下方式计算的modinverse(p, q)- 这就是通常所说的 qInverse 吗?

这比我以前使用的私钥的 RSA 数据要少得多,所以我不太确定该怎么做。但是,我了解到 RSACryptoServiceProvider 使用的一些 RSA 数据只是出于优化目的而预先计算的数据,所以也许不需要其余的?

使用这些数据,站点的 JavaScript 使用以下函数解密会话 ID:

我想在 .NET 中使用 RSACryptoServiceProvider 执行此操作,但如果我给它我拥有的 4 条数据(假设 u == qInverse),则密钥在导入期间被拒绝,并出现“错误数据”异常。

我应该对数据做更多的事情吗?RSACryptoServiceProvider 在这种情况下是否可用?

我正在测试的参数和加密数据示例如下。

附录 2 月 2 日

我已经在链接的 StackOverflow 答案中进行了挖掘,并且已经达到了我认为我已经确定如何生成缺少的组件的地步。但是,现在我得到了一个“坏键”异常,这让我很困惑。

我将编写我用来生成缺失组件的代码——也许你可以在某处发现错误?

我还手动计算了 InverseQ 和 D,并且这些值与我的输入数据中的值匹配。下面是我仅基于 q、p 和 e 生成所需数据的函数。

我的输入数据是:

以下是我如何使用生成的结构:

ImportParameters调用会引发异常,提示“Bad key”。我究竟做错了什么?

如果我切换 Q 和 P 会发生什么?

显然,它使 RSACryptoServiceProvider 接受数据!但这究竟意味着什么?

ExtendedEuclidGcd我从我必须在我的生成代码中使用的方式得到这个想法。不得不为两个实例使用不同的输出让我很困扰,所以我进行了这个实验。

一件事是u != qInverse- 这是正确的吗?我不了解原始 JavaScript 函数中的数学运算,所以我不确定它的含义是什么。我是否正确猜测原始中的 u 值实际上是一些内部快捷方式而不是 QInverse?

接下来的进一步测试(即数据的实际解密)。一旦有了任何新的发展,我都会编辑这个问题。

使用此参数集解密失败

我拥有的加密测试数据是(base64 编码):

由于我不确定字节顺序,因此给出了两种选择。两个字符串中的数据相同。

这两种情况的解密都失败了,但在第一种情况下会出现“错误数据”和“没有足够的存储空间来处理此命令”的异常。在第二种情况下(MSDN 声称这可能意味着密钥与加密数据不匹配)。我告诉 RSACryptoServiceProvider 使用了 PKCS 填充,尽管我也尝试了 OAEP(它只是给出了一个关于未能解码填充的错误)。

原始的 JavaScript 可以毫无问题地解密数据,尽管它的“p”和“q”是从我的转换过来的。

现在,我的问题是:

  • P 和 Q 切换是有效的操作吗?
  • 我的推理是有效的还是我在某个地方犯了错误?
  • 接下来我应该怎么做才能成功解密我的测试数据?
0 投票
0 回答
515 浏览

smartcard - 选择智能卡加密服务提供商

我正在做一些智能卡编程,并想考虑以下情况:

  1. 卡中的证书未导入本地商店(这不是给定的,这是当前问题的根源)

  2. 未提供提供者的名称

第二个标准意味着我不能依赖通过创建 RSACryptoServiceProvider 的实例来获取证书,如下所示:

因此,除了从 HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider 或 HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Cryptography\Defaults\Provider 从注册表中读取所有提供程序的名称之外,然后从每个到创建一个 RSACryptoServiceProvider 实例查看容器是否将自己标识为硬件设备,似乎有一种更简单的方法可以直接从读卡器访问证书。

我已经研究过使用 P/Invoke 和 API,但也无法确定我可以为此使用哪些 API 调用。

0 投票
1 回答
778 浏览

vb.net - 在 .NET 中使用 RSA 解密消息 - m**d mod p*q 不起作用

我正在尝试使用 Mega 加密 API,但我被 RSA 解密部分卡住了。

使用的 JavaScript 是这样的:

我正在使用 .NET(支持 BigInteger 的 4.0)并且我正在尝试复制相同的行为。

我拥有的 RSA 数据是:

我尝试使用 RSACryptoServiceProvider 没有运气。在另一篇文章中,另一位用户报告说他使用基本的 RSA 解密算法 (m**d mod p*q) 并避免使用 RSACryptoServiceProvider。

我实现了它(我理解 U 部分不是必需的),确保输入与 Javascript 输入完全相同,但仍然没有运气。输出与 Javascript 代码的预期不同。

这是实现的功能:

测试代码:

此代码返回:

但是,JavaScript 函数返回

你知道我做错了什么,我该如何解决这个问题?

0 投票
1 回答
1331 浏览

c# - 第 326 行中的 RSACryptoServiceProvider.VerifyData 异常

我在使用 RSACryptoServiceProvider.VerifyData 时遇到问题

NullReferenceException:对象引用未设置为对象 System.Security.Cryptography.RSACryptoServiceProvider.VerifyData(System.Byte[] 缓冲区,System.Object halg,System.Byte[] 签名)的实例(在 /Applications/buildAgent/work/ 3df08680c6f85295/mcs/class/corlib/System.Security.Cryptography/RSACryptoServiceProvider.cs:326)

您可以在 RSACryptoServiceProvider.cs 第 326 行看到异常我仔细检查了所有参数和 rsa 的创建——一切正常。有任何想法吗 ?

我的代码:

0 投票
2 回答
1226 浏览

c# - EncryptedXml DecryptDocument 方法抛出“坏数据”异常

我为加密/解密流编写了一个代码块。该代码在我的本地机器上运行。但是当我在网络上发布我的代码时,解密函数抛出“坏数据”异常这是我的加密和解密函数

在“exml.DecryptDocument();”上抛出异常 线。

您对问题和解决方案有任何想法吗?

编辑:

MSDN页面中,有如下备注

要将 XML 加密与 X.509 证书一起使用,您必须安装 Microsoft 增强加密提供程序,并且 X.509 证书必须使用增强提供程序。如果您没有安装 Microsoft 增强加密提供程序或 X.509 证书不使用增强提供程序,则在解密 XML 文档时将引发带有“未知错误”的 CryptographicException。

您对“Microsoft Enhanced Cryptographic Provider”和“X.509 证书”有任何想法吗?我的问题与这些有关吗?

0 投票
1 回答
5352 浏览

c# - 在 C# 中使用具有正确私钥和公钥对的 RSA 解密时出现错误数据异常

这是我的解密过程代码:

加密代码:

我看不到哪里出错了。我已确保密钥正确。我在构造函数中使用这一行提取的公共的:_publicKey = _rsa.ToXmlString(false); 此公钥显示在我创建的表单上。私人我使用“真”而不是假。

有任何想法吗?