使用智能卡证书的公钥解密
Decryption with PublicKey of Smartcard Certificate
我目前正在使用来自德国项目的智能卡 secure/encrypt 收银机系统的某些数据(称为 INSIKA,如果有人知道的话)。智能卡包含一个证书,其中包含一个用于加密的未知私钥和一个用于解密数据的 public 密钥。可以使用智能卡本身的功能对数据进行加密。不幸的是,没有这样的方法来解密加密数据。
INISKA 文档提到,我应该能够读取存储在智能卡上的证书并获得 public 密钥,我可以使用它来实际解密 pdata 我自己。但不知何故,我找不到合适的方法来做到这一点。使用我得到的智能卡:
- 包含证书原始数据的字节数组
- X509Certificate2 实例使用此 class 的构造函数和原始数据
- 使用证书实例的 GetPublicKey() 方法的 public 密钥字节数组
- 属性 公钥包含一些信息,如 Oid 或 AlgorithmId
到目前为止,我的大部分搜索结果都建议我使用如下代码:
RSACryptoServiceProvider provider = (RSACryptoServiceProvider) certificate.PublicKey.Key;
byte[] decryptedData = provider.Decrypt(signature.SignatureByteArray, false);
但是访问 .Key 属性 会引发 NotSupportedException 并显示消息“不支持证书密钥算法。”。证书 PublicKey.Oid 属性 包含 public 密钥算法为 ECC(黄道曲线密码术)
的信息
有没有人有任何建议我可以做些什么来解密我设法使用我拥有的信息加密的数据?我是否可能缺少证书的某些部分或 select 正确密钥算法所需的某些功能?还有另一种方法可以使用 public 密钥(例如字节数组)手动实例化一些解密 class (我发现的所有示例代码都需要一些我没有或不知道在哪里的信息得到模数或指数)?提前致谢!
您无法解密 签名。您只能 验证 它们。解密和验证是不同的概念,与 PKCS#1 兼容的 RSA 使用不同的填充机制——当然还有不同的密钥——两者。
请改为查看 RSACryptoServiceProvider
的 VerifyData
和 VerifyHash
方法。您无法解密签名(如果可以,在 99% 的情况下,您只会取回 单向哈希 值,而不是数据)。
我目前正在使用来自德国项目的智能卡 secure/encrypt 收银机系统的某些数据(称为 INSIKA,如果有人知道的话)。智能卡包含一个证书,其中包含一个用于加密的未知私钥和一个用于解密数据的 public 密钥。可以使用智能卡本身的功能对数据进行加密。不幸的是,没有这样的方法来解密加密数据。
INISKA 文档提到,我应该能够读取存储在智能卡上的证书并获得 public 密钥,我可以使用它来实际解密 pdata 我自己。但不知何故,我找不到合适的方法来做到这一点。使用我得到的智能卡:
- 包含证书原始数据的字节数组
- X509Certificate2 实例使用此 class 的构造函数和原始数据
- 使用证书实例的 GetPublicKey() 方法的 public 密钥字节数组
- 属性 公钥包含一些信息,如 Oid 或 AlgorithmId
到目前为止,我的大部分搜索结果都建议我使用如下代码:
RSACryptoServiceProvider provider = (RSACryptoServiceProvider) certificate.PublicKey.Key;
byte[] decryptedData = provider.Decrypt(signature.SignatureByteArray, false);
但是访问 .Key 属性 会引发 NotSupportedException 并显示消息“不支持证书密钥算法。”。证书 PublicKey.Oid 属性 包含 public 密钥算法为 ECC(黄道曲线密码术)
的信息有没有人有任何建议我可以做些什么来解密我设法使用我拥有的信息加密的数据?我是否可能缺少证书的某些部分或 select 正确密钥算法所需的某些功能?还有另一种方法可以使用 public 密钥(例如字节数组)手动实例化一些解密 class (我发现的所有示例代码都需要一些我没有或不知道在哪里的信息得到模数或指数)?提前致谢!
您无法解密 签名。您只能 验证 它们。解密和验证是不同的概念,与 PKCS#1 兼容的 RSA 使用不同的填充机制——当然还有不同的密钥——两者。
请改为查看 RSACryptoServiceProvider
的 VerifyData
和 VerifyHash
方法。您无法解密签名(如果可以,在 99% 的情况下,您只会取回 单向哈希 值,而不是数据)。