问题标签 [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.
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 函数需要密钥必须始终可导出?或者我在我的程序中犯了任何错误?可能有任何遗漏的参数吗?
c# - 加密异常 指定的标志无效
这是我的代码:
我只是不断收到相同的错误“指定的标志无效”。如果我使用无参数构造函数,则不会引发异常并且密钥大小为 1024。
c# - 使用 RSACryptoServiceProvider 加密时如何定义哈希大小?
可能重复:
RSACryptoServiceProvider(.NET 的 RSA)可以使用 SHA256 进行加密(不是签名)而不是 SHA1 吗?
当RSACryptoServiceProvider
用于加密时,默认的哈希算法显然是SHA-1
. 如何SHA-512
在加密数据时定义另一种哈希算法(使用该Encrypt
方法)?我没有找到与哈希算法相关的任何属性。
c++ - 在其他计算机中导入 RSA 密钥的问题
我正在创建一个使用一对密钥(公钥和私钥)进行加密和解密的小工具。我在我的计算机上导出公钥和私钥,我可以毫无问题地加密和解密文件。当我尝试使用相同的公钥解密其他机器中的文件时遇到问题。
在密钥软件创建应用程序的同一台计算机上正确加密和解密,但如果我尝试在其他计算机上解密文件,CryptDecrypt() 失败并出现错误 80090003(GetLastError() 得到的错误)知道吗?我究竟做错了什么...?如何将公钥导出到其他计算机?谢谢!
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 切换是有效的操作吗?
- 我的推理是有效的还是我在某个地方犯了错误?
- 接下来我应该怎么做才能成功解密我的测试数据?
smartcard - 选择智能卡加密服务提供商
我正在做一些智能卡编程,并想考虑以下情况:
卡中的证书未导入本地商店(这不是给定的,这是当前问题的根源)
未提供提供者的名称
第二个标准意味着我不能依赖通过创建 RSACryptoServiceProvider 的实例来获取证书,如下所示:
因此,除了从 HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider 或 HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Cryptography\Defaults\Provider 从注册表中读取所有提供程序的名称之外,然后从每个到创建一个 RSACryptoServiceProvider 实例查看容器是否将自己标识为硬件设备,似乎有一种更简单的方法可以直接从读卡器访问证书。
我已经研究过使用 P/Invoke 和 API,但也无法确定我可以为此使用哪些 API 调用。
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 函数返回
你知道我做错了什么,我该如何解决这个问题?
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 的创建——一切正常。有任何想法吗 ?
我的代码:
c# - EncryptedXml DecryptDocument 方法抛出“坏数据”异常
我为加密/解密流编写了一个代码块。该代码在我的本地机器上运行。但是当我在网络上发布我的代码时,解密函数抛出“坏数据”异常这是我的加密和解密函数
在“exml.DecryptDocument();”上抛出异常 线。
您对问题和解决方案有任何想法吗?
编辑:
在MSDN页面中,有如下备注
要将 XML 加密与 X.509 证书一起使用,您必须安装 Microsoft 增强加密提供程序,并且 X.509 证书必须使用增强提供程序。如果您没有安装 Microsoft 增强加密提供程序或 X.509 证书不使用增强提供程序,则在解密 XML 文档时将引发带有“未知错误”的 CryptographicException。
您对“Microsoft Enhanced Cryptographic Provider”和“X.509 证书”有任何想法吗?我的问题与这些有关吗?
c# - 在 C# 中使用具有正确私钥和公钥对的 RSA 解密时出现错误数据异常
这是我的解密过程代码:
加密代码:
我看不到哪里出错了。我已确保密钥正确。我在构造函数中使用这一行提取的公共的:_publicKey = _rsa.ToXmlString(false); 此公钥显示在我创建的表单上。私人我使用“真”而不是假。
有任何想法吗?