问题标签 [cryptographicexception]
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# - 如何避免 CryptographicException?
当由于密钥错误而导致解密失败时,您会收到 System.Security.Cryptography.CryptographicException。
如何避免它?是否有一个最好看起来像这样的内置解决方案?
vb.net - 我有问题说 System.Security.Cryptography.CryptographicException: 'Bad Data。' 在 vb.net 中尝试导入 RSA 参数时
这是我不确定是否有任何隐藏错误的代码,但是在运行时尝试导入 rsa 参数时会弹出该错误
在这里生成 RSA 数字时,我不能总是得到正确的数字,所以我使用这个网站来检查我是否得到了正确的 RSA 数字,并且 D 和指数不 = 0
指数=e
每次我得到 Exponent 和 D 时,我都会使用这个网站检查 P、Q、Exponent 和 D 以确保它是正确的
https://www.cs.drexel.edu/~jpopyack/IntroCS/HW/RSAWorksheet.html
在这里所有的 D,P,Q,DP,DQ,Exponent,Modulus,InverseQ 值都已计算和检查
如果可以尝试检查这里的编码,也许这个地方是我做错的地方
我最初想到使用 BitCoverter.GetBytes() 来转换 long 和 Ulong 数据类型值
但最后,bitconverter.getbytes() 对我不起作用,所以我必须首先将所有这些 long 和 ulong 数据类型值转换为字符串,然后使用 BYTE.PARSE() 将字符串转换为字节值
我就是这样做的
如果让我们这里的任何专家确认上面的编码有效并且所有值都是正确的,那么尝试检查这里是否有任何潜在的错误
我在生成按钮中尝试做的是为 RSA 创建合适的参数。
我实际上能够生成它们的参数,但可以是 ULong 或 Long 数据类型。
当我第一次将它们转换为字节数组时,我考虑过使用 BitConverter,但至少在我的情况下它不起作用。
我只能将它们变成字节数组的唯一方法是将 ULong 或 Long 数据类型变量变成字符串。
然后将这些字符串转换为 Byte,然后将它们放入 ByteArray 我希望它是正确的,但现在我无法做到。
关于如何使参数数据被接受为 rsa 参数的任何想法?
.net - 单元测试 AppContext 开关
更改日志
- 重命名问题:
AppContext Switch Failing In Unit Test (CryptographicException: Invalid Algorithm Specified) - 在进行更多调查后,在底部添加了进一步详细说明问题的部分
- 在底部添加了解释我已实施的解决方法的部分
我有一段代码,我正在编写用于签署一些 xml 的单元测试。
我注意到在开发 .NET 4.7.1+ 将抛出的代码时CryptographicException: Invalid algorithm specified
。为了解决这个问题,我使用了以下AppContext
开关(来源:wiktor zychla,为什么我指定了无效的算法......)。
我已将以下代码放入任何调用我的 xml 签名代码的应用程序中:
在野外运行时,此代码运行正常,并且我的 xml 正在按预期进行签名。
我已经为这段代码编写了一些单元测试,这是我第一次真正尝试编写单元测试,我遇到了一些奇怪的边缘情况。
因此,如果抛出异常,我会显示一条很好的消息,说请在调用此方法之前添加以下代码。
我的测试类看起来像这样:
当我运行SignXML_AppContextSwitchSet_Success
我希望自己通过的时候,测试每次都通过(只是我反复运行它)。如果我清理我的解决方案并运行所有测试,测试总是失败。
我的 xml 生成类没有共享对象,它实际上可能是静态的。
测试失败是因为抛出了加密异常(触发我的代码并抛出异常告诉开发人员(我)添加应用程序上下文切换)。
有没有办法验证配置开关是否得到尊重?
从我的控制台测试器应用程序和我内置的 wpf 应用程序运行代码时,永远不会抛出异常。只有当我背靠背运行所有单元测试时才会抛出它。我希望这些测试在 azure 管道上运行,因此它可以同时运行和单独运行很重要。
我对这个例外的想法是,也许当我一起运行所有测试时,AppContext
开关没有得到尊重。我尝试在签署 xml 之前添加检查:
现在您希望此代码无法通过我的失败测试(未设置开关)并且确实如此,您可以NotImplementedException
在测试资源管理器中看到我的粗略消息。然而,我期望成功的测试CryptographicException
再次引发......
正如我之前所说,我对测试非常陌生,我不确定我的测试设计方法是否错误,如果我只是在测试一些底层代码,所以也许我注定要尝试测试它或我缺少一些东西来允许对这种情况进行正确测试。
我目前正在使用NUnit 3.12.0 + NUnit3TestAdapter 3.15.1
编写测试,尽管我最初使用MSTest 1.3.2
并体验了使用这两个框架的相同行为。
更新
我发现以下测试的执行顺序决定了成功:
- SignXML_AppContextSwitchNotSet_Fail
- SignXML_AppContextSwitchSet_Success
我通过阅读诸如(单元测试在全部运行时失败,但在单独运行时通过)在不单独运行时测试失败的帖子发现了这一点。
它让我想到了正在设置的值,我想要以下情况:
尽管我已经测试了这些值是否正确设置,但底层开关是否正在更新?如何清理这些底层对象?
解决方法/“讨厌”修复
我在NUnit 的 GitHub (appdomain per test (isolation per test), for handling static classes)上发现了以下问题。在这个线程中,他们讨论了AppDomain
每个测试的新选项,这正是我所需要的。
沿着线程jnm2发布一个 util 类以单独运行代码AppDomain
(代码)(我不会在这里发布它,因为这篇文章已经很庞大了)。我采用了这个 util 类并调整了我的测试以使用它(你不能使用任何类变量或方法,这意味着我必须复制我的辅助方法代码)。
一旦我实现了 util 并调整了我的测试以符合它的标准,当我单独运行它们时测试开始通过,并且一次全部运行。
任务完成!
.net - Power BI Embedded,使用证书获取身份验证令牌时出现问题 - 出现错误“无效的提供程序类型”
我正在使用嵌入在本地 Intranet 应用程序中的 Power BI 并获取身份验证令牌,我正在使用证书。我面临的问题是,在本地进行时效果很好。但是当发布到我们的开发服务器时,它只在一个实例上工作,而不是在其他实例上,比如本地的 QA 或 UAT 环境。
这可能是什么原因?是因为我们没有正确使用证书吗?奇怪的是,如果它失败了,为什么它只适用于一个网络服务器实例而不是其他网络服务器?
****这是我们用于获取身份验证令牌的代码片段:****
这是我得到的错误。
ExceptionMessage":"指定的提供程序类型无效。\r\n","ExceptionType":"System.Security.Cryptography.CryptographicException","StackTrace":" atSystem.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)\r\n at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)\ r\n 在 System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()\r\n 在 System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)\r\n 在 System.Security.Cryptography .X509Certificates.X509Certificate2.get_PrivateKey()\r\n 在 System.IdentityModel.Tokens.X509AsymmetricSecurityKey.get_PrivateKey()\r\n 在 System.IdentityModel.Tokens.X509AsymmetricSecurityKey.GetAsymmetricAlgorithm(字符串算法,Boolean privateKey)\r\n 在 Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Platform.SigningHelper.SignWithCertificate(字符串消息,X509Certificate2 证书)\r\n 在
Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.d__59.MoveNext()"}
c# - 使用 RSACng 512 + OaepSHA256 加密数组时出现“参数不正确”异常
我在使用带有 OaepSHA256(C#,.NET Framework 4.6.1)的 RSACng(512)时遇到问题 - 获取 System.Security.Cryptography.CryptographicException:“参数不正确。” 在编码(任何)字节数组时:
如果我使用 1024 密钥大小,它可以工作:
如果使用 512 密钥大小,它也可以工作,但使用 OaepSHA1 而不是 OaepSHA256:
知道为什么这不起作用以及如何使其适用于 512 + OaepSHA256?
azure - 在 Azure 应用服务的代码中读取 TLS/SSL 私钥证书
在这篇 Microsoft文章之后,我们正在访问上传到我们的应用服务的代码中的私钥证书。正如文章所示,我们可以通过其指纹查找证书,并且可以读取它,但是当我们尝试使用以下代码访问其密钥值时,我们会收到错误“CryptographicException:密钥集不存在。”。将密钥转换为 RSACryptoServiceProvider 时发生错误。
此错误消息具有欺骗性,因为我知道密钥集确实存在。在我的非 Azure 开发 VM 上,我可以像任何其他证书一样将私钥文件加载到我的本地计算机证书存储中,并使用相同的代码读取它们的密钥及其值。我确实必须向我的站点在本地运行的用户(IIS 应用程序池标识)授予对证书密钥的访问权限。您可以在 Microsoft 管理控制台中执行此操作(参见图片)。因此我们推测这是一个授权问题。
有人遇到过这种情况么?
堆栈跟踪:22488 21:52:18 错误证书密钥强制转换为 RSACryptoServiceProvider:System.Security.Cryptography.CryptographicException:密钥集不存在
在 System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) 在 System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle) 在 System.Security .Cryptography.RSACryptoServiceProvider.GetKeyPair() 在 System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters 参数, Boolean useDefaultKeySize) 在 System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() 在 BCU.Web.Controllers。 CovidLiveAgentController.GetAccessToken() Stacktrace:在 System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) 在 System.Security.Cryptography.Utils。GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle) at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair() at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize) 在 System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() 在 BCU.Web.Controllers.CovidLiveAgentController.GetAccessToken()CspParameters 参数,布尔值 useDefaultKeySize) 在 System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() 在 BCU.Web.Controllers.CovidLiveAgentController.GetAccessToken()CspParameters 参数,布尔值 useDefaultKeySize) 在 System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() 在 BCU.Web.Controllers.CovidLiveAgentController.GetAccessToken()
windows - ProtectedData.Unprotect 方法在同一台机器上安装不同的操作系统时抛出 CryptographicException
我们的应用程序安装在客户端位置。应用程序使用 ProtectedData.Protect 方法保护客户端计算机上的密钥并将输出保存到文件中。以下是代码:
ProtectedData.Protect(sampleHashKey, entropy, DataProtectionScope.LocalMachine);
其中熵是一个字节数组。
客户端已将该计算机上的操作系统更新为 Windows 2016 Server,并在此之前备份了哈希密钥文件,并重新安装了我们的软件,该软件创建了一个新的哈希密钥文件。客户端用备份的文件替换了新的散列密钥文件。当软件尝试读取文件时,使用具有以下代码的 unprotect 机制:
ProtectedData.Unprotect(sampleHashKey, entropy, DataProtectionScope.LocalMachine);
引发CryptographicException 并出现错误:密钥在指定状态下无效。
为什么即使文件是使用DataProtectionScope.Localmachine在同一台机器上创建的,也会发生此错误?它不会在同一台机器上跨操作系统工作吗?有人可以解释一下这个问题吗?
python-3.x - 签名验证失败,python 中出现 InvalidSignature 异常
我正在编写一个简单的程序来使用私钥/公钥验证消息。请不要担心编译,我在这里只粘贴相关的片段,编译在原始文件中没有错误。首先,我生成密钥并将它们序列化,例如:
此外,我对哈希消息进行数字签名,例如:
现在在另一个验证函数中,我编写了如下代码来验证签名:
但这会一直返回 False,因为它遇到了异常。我已经尝试在这里打印每个变量,并且数据似乎正确。该程序基于此处给出的示例 - https://cryptography.io/en/latest/hazmat/primitives/asymmetric/rsa 请帮助。