c# - 智能卡的 C# RSA 解密问题 - 填充未从结果中删除
问题描述
我正在使用 RSACryptoServiceProvider 来加密和解密简单的字符串,虽然它适用于普通证书,但我在使用智能卡时遇到了麻烦。
这是我正在使用的代码:
创建 RSACryptoServiceProvider:
public static RSACryptoServiceProvider GetRSACSPSmartCard()
{
CspParameters csp = new CspParameters(1, "Microsoft Base Smart Card Crypto Provider", "XML_ENC_RSA_KEY");
csp.Flags = CspProviderFlags.UseDefaultKeyContainer;
csp.KeyPassword = GetSmartCardPin();
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
return rsa;
}
加解密测试方法:
private static void TestEnAndDecryption(RSACryptoServiceProvider rsa)
{
byte[] toEncryptData;
byte[] encryptedRSA;
Console.WriteLine(rsa.ToXmlString(false));
Console.WriteLine();
Console.WriteLine(rsa.CspKeyContainerInfo);
toEncryptData = Encoding.ASCII.GetBytes("hello world");
encryptedRSA = rsa.Encrypt(toEncryptData, RSAEncryptionPadding.Pkcs1);
string EncryptedResult = Encoding.ASCII.GetString(encryptedRSA);
Console.WriteLine(EncryptedResult);
Console.WriteLine();
byte[] decryptedRSA = rsa.Decrypt(encryptedRSA, RSAEncryptionPadding.Pkcs1);
string originalResult = Encoding.ASCII.GetString(decryptedRSA);
Console.WriteLine(originalResult);
}
它确实解密成功,但结果填充没有被删除: 加密/解密的输出
有趣的是,无论我加密什么,解密后的 byte[] 长度始终为 256。相同的代码适用于不是来自智能卡的普通 RSA 密钥。
你们有没有人有过类似的情况?
我很感谢任何提示或支持 - 谢谢。
解决方案
推荐阅读
- laravel-5.2 - 在 Laravel 中使用包含变量
- database - 如何使用进程内迁移运行程序和内存 SQLite 数据库测试流畅的迁移
- android - 来自 gitlab 本地服务器私有存储库的 Android 库 maven 依赖项
- python - 文本到语音 Raspberry pi 错误 - gtts.tts.gTTSError:令牌计算期间的连接错误
- javascript - jQuery:获取活动链接索引总是返回 0
- java - 如何从 pom.xml 中提取所有依赖项?
- f# - 将接收到的串行数据事件处理程序添加到 f# 串行端口阅读器
- c# - 如何为使用 Application.Current.Dispatcher.Invoke 的方法编写 WPF 异步单元测试?
- javascript - React中过滤列表为空时如何显示消息
- javascript - XSTLProcessor 绕过和标记