首页 > 解决方案 > 智能卡的 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 密钥。

你们有没有人有过类似的情况?

我很感谢任何提示或支持 - 谢谢。

标签: c#encryptionrsasmartcard

解决方案


推荐阅读