- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 BouncycaSTLe 来管理我的项目的加密功能。我设法使用 CMS 进行加密和解密,其中两个 key 都存储在我的文件系统中(.cert
和 .p12
)。
这是我实际使用的两个函数:
private static byte[] CmsEncrypt(byte[] message)
{
var envelopGenerator = new CmsEnvelopedDataGenerator();
var certificateStream = new FileStream("Test.cer", FileMode.Open, FileAccess.Read);
var cert = new X509CertificateParser().ReadCertificate(certificateStream);
envelopGenerator.AddKeyTransRecipient(cert);
return
envelopGenerator.Generate(new CmsProcessableByteArray(message), CmsEnvelopedGenerator.DesEde3Cbc)
.GetEncoded();
}
private static byte[] CmsDecrypt(byte[] encrypted, AsymmetricKeyParameter key, X509Certificate cert)
{
return new CmsEnvelopedData(encrypted).GetRecipientInfos().GetFirstRecipient(new RecipientID()
{
SerialNumber = cert.SerialNumber,
Issuer = cert.IssuerDN
}).GetContent(key);
}
现在我必须向前迈出一步,私钥必须在智能卡上,但我真的不知道在这种情况下使用 CMS。
我可以初始化卡片并解密一条简单的消息(使用标准 pkcs11,我找到了一个很好的 c# 包装器)但是我找不到任何线索如何做 CMS 用智能卡解密。
最佳答案
AFAIK BouncyCaSTLeSharp 开箱即用,仅使用可以暴露在主机内存中的加密 key 。但是,一定不要忘记 Bouncy CaSTLe C# 是一个通用的加密库,如果您愿意在较低级别的 API 上做一些额外的工作,您也可以将它与不能公开的 key 一起使用主机内存。此类 key 通常存储在专门的加密硬件中,即智能卡、HSM、TPM,并且通常只能通过专门的加密 API 访问和使用,例如 MS CryptoAPI(仅限 Windows)和/或 PKCS#11 API(多平台)。
我已经创建了一个示例应用程序 - Pkcs7SignatureGenerator - 使用 Pkcs11Interop 创建 CMS 签名(我是作者)和 Bouncy Castle图书馆。在此应用程序中,Pkcs11Interop 库通过 PKCS#11 API 使用存储在硬件设备中的私钥执行签名操作,Bouncy CaSTLe 库负责构建 CMS (PKCS#7) 签名结构。
在您的情况下,您需要使用 BouncyCaSTLe 库(低级 API)来解析 CMS 结构,然后使用 PKCS#11 库进行低级解密。这种方法需要您编写更多代码并对 CMS 有更深入的了解,但这当然可以做到。
顺便说一句,几个月前我正在评估用于更紧密地集成 Pkcs11Interop 和 BouncyCaSTLe 库的可用选项,但我发现 BouncyCaSTLe 关键 Material 处理 API 不提供所需的抽象级别,因此这种集成需要对库进行重大重写.这将破坏其向后兼容性,并且 IMO 不会轻易被上游开发人员接受。所以我决定不再继续。
希望这对您有所帮助。
关于c# - 智能卡 CMS 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29556157/
我正在尝试通过 java smartcardio 读取印度政府标准的“Scosta”智能卡我使用的代码是 package com.example.smartcardreader; import jav
下面的代码适用于 2 个不同的加密智能卡库(certum cryptoCertum3PKCS.dll 和 cencert enigmap11.dll ),但在提供用于 100%正确 有人知道我做错了什
有没有人有阅读 eVRC(电子车辆登记卡)和 JAVA 中的 APD U 命令的经验? 任何例子都会有用。 提前致谢。 最佳答案 我强烈建议您使用 javax.smartcardio 库。请注意,在后
我正在将一个旧项目迁移到 Java,但我遇到了一些有关智能卡访问的问题。由于缺乏文档,我不得不自己寻找解决方法,所以我希望你们能帮助我。 我有一张智能卡和一个用于访问卡功能的 dll 库(中间件)。使
我刚刚开始了解一些智能卡,并且正在使用 pyscard 进行练习。 所以我有 2 个问题(我使用的是 Visa 预付卡): 1)我在网上看到有人说有一个方法可以知道你的卡可以使用哪些选择方式,通过他的
Closed. This question needs debugging details。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。 6个月前关闭。
我正在使用 BouncycaSTLe 来管理我的项目的加密功能。我设法使用 CMS 进行加密和解密,其中两个 key 都存储在我的文件系统中(.cert 和 .p12)。 这是我实际使用的两个函数:
我正在尝试使用 CredMartialCredential 和 LogonUser 为使用智能卡的用户帐户获取访问 token 。有两个帐户可以使用智能卡进行身份验证(描述(有点)here)。 通过关
我们尝试在 iPhone 上连接 PIV 智能卡。我们已经加载了必要的库并且可以发送命令。使用获取数据和获取响应命令的组合,我们能够从智能卡检索所有相关证书。我们现在尝试发送通用身份验证命令来签署一些
我在使用智能卡签署 PDF 文档时遇到问题。它适用于不合格的证书,但不适用于合格的证书。我正在使用 SunPKCS11 提供程序。这是 CryptoTech 卡。这是代码的一部分,我尝试在该提供程序上
我正在为 ISO 7816 卡编写智能卡程序,我需要更新记录。我用JAVA和javax.smartcardio编写程序图书馆。 我使用以下命令选择文件:ins = 0xA4 我可以使用此命令读取记录:
我正在开发用于读取 EMV 卡的智能卡读卡器。我正在处理一张万事达卡,我试图读取特定记录。结果显示读数很好,但是当我解析结果时,它们似乎不遵循 TLV 标准,其中结果采用 Tag/Template-L
我有一个网络服务器服务,客户端请求智能卡计算并获得结果。在服务器正常运行期间,可用的智能卡数量可能会减少或增加,例如,我可以从读卡器中物理添加或移除智能卡(或许多其他事件......如异常等)。 智能
[我的设置] RDP 客户端 (Win7) ------------------RDP------------------------ -> 带智能卡的远程服务器 (Win2k8R2) 我发现无数的答
我可以毫无问题地从智能卡发送大部分数据。我注意到出于某种原因我总是需要删除 APDU 中的前 6 个字节才能获取真实数据。 但是,当发送一个特定数据时,很难知道该数据在 APDU 中的位置。 这是Ja
我也在使用 C++(Windows API)和 Java 的 SmartCard API。 我在删除操作系统后获取 ATR 时遇到问题。我的申请是为了从智能卡中删除操作系统。当操作系统被删除时,卡的
我正在编写一个Java程序,它使用USB证书(智能卡)进行加密和签名。我有一个共享库(Windows 上为 .dll,Linux 上为 .so),它为硬件实现了 PKCS11。 我正在搜索现有的解决方
我目前可以正确使用 pyscard 与我的智能卡通信,但是当 apdu 大小超过 255 字节时,我需要接收命令的剩余字节。 用什么方法获取 pyscard 中的剩余字节?根据我的理解,sw2 应该是
我必须调用服务器上的脚本(php、jsp - 什么都行)。但是此服务器受客户端身份验证保护。现在我可以使用 P12-Keystore 来完成它。代码: private void install
我正在尝试在 ACOS5-64 智能卡和 OMNIKEY 3121 读卡器上创建 AES 256 key ,使用 python 中的 PKCS11(使用 PyKCS11 库)。到目前为止,所有“标准”
我是一名优秀的程序员,十分优秀!