【发布时间】:2015-11-21 11:17:57
【问题描述】:
我目前正在使用来自德国项目的智能卡来保护/加密收银系统的某些数据(称为 INSIKA,如果有人知道的话)。智能卡包含一个证书,其中包含用于加密的 unkonwkn 私钥和用于解密数据的公钥。可以使用智能卡本身的功能对数据进行加密。不幸的是,没有这样的方法来解密加密数据。
INISKA 文档提到,我应该能够读取存储在智能卡上的证书并获取我可以用来实际解密 pdata 自己的公钥。但不知何故,我找不到合适的方法来做到这一点。使用我得到的智能卡:
- 包含证书原始数据的字节数组
- 使用此类的构造函数和原始数据的 X509Certificate2 实例
- 使用证书实例的 GetPublicKey() 方法的公钥字节数组
- PublicKey 属性包含一些信息,例如 Oid 或 AlgorithmId
到目前为止,我的大部分搜索结果都建议我应该使用如下所示的代码:
RSACryptoServiceProvider provider = (RSACryptoServiceProvider) certificate.PublicKey.Key;
byte[] decryptedData = provider.Decrypt(signature.SignatureByteArray, false);
但是,访问 .Key 属性会引发 NotSupportedException,并显示消息“不支持证书密钥算法。”。证书PublicKey.Oid属性包含公钥算法为ECC(黄道密码)的信息
有没有人有任何建议我可以做些什么来解密我设法使用我拥有的信息加密的数据?我是否可能缺少证书的某些部分或某些需要的功能来选择正确的密钥算法?是否有另一种使用公钥(例如字节数组)手动实例化一些解密类的方法(我发现的所有示例代码都需要一些我没有或不知道从哪里获得的信息,例如模数或指数)?提前致谢!
【问题讨论】:
-
您可以随时读取整个证书并将其转储到文件中。然后在 Windows 中打开它,它将显示证书的所有属性,即:密钥、密钥类型、加密类型、指纹等。
标签: c# .net cryptography smartcard x509certificate2