Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net Rsa使用x509证书解密_C#_Ssl_Encryption_X509certificate - Fatal编程技术网

C# .Net Rsa使用x509证书解密

C# .Net Rsa使用x509证书解密,c#,ssl,encryption,x509certificate,C#,Ssl,Encryption,X509certificate,我有私钥(.pfx)和导出公钥(.pem)的证书。 我可以用私钥加密字符串,但用公钥解密有困难。 每次我得到“密钥不存在”。 这里我尝试获取公钥-它不是空的 X509Certificate2 cert2 = new X509Certificate2("sem-cert-public.pem"); string a= cert.GetPublicKeyString(); 但用这种方式解密是行不通的 RSACryptoServiceProvider rsa = (RSACryptoService

我有私钥(.pfx)和导出公钥(.pem)的证书。 我可以用私钥加密字符串,但用公钥解密有困难。 每次我得到“密钥不存在”。 这里我尝试获取公钥-它不是空的

X509Certificate2 cert2 = new X509Certificate2("sem-cert-public.pem");
string a= cert.GetPublicKeyString();
但用这种方式解密是行不通的

 RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PublicKey.Key;
                    int keySize = rsa.KeySize;
                    int base64BlockSize = ((keySize / 8) % 3 != 0) ? (((keySize / 8) / 3) * 4) + 4 : ((keySize / 8) / 3) * 4;
                    int iterations = inputString.Length / base64BlockSize;
                    var arrayList = new ArrayList();
                    for (int i = 0; i < iterations; i++)
                    {
                        byte[] encryptedBytes = Convert.FromBase64String(
                            inputString.Substring(base64BlockSize * i, base64BlockSize));

//crashes here
                        arrayList.AddRange(rsa.Decrypt(encryptedBytes, false));
                    }
rsacyptoserviceprovider rsa=(rsacyptoserviceprovider)cert.PublicKey.Key;
int keySize=rsa.keySize;
int base64BlockSize=((键大小/8)%3!=0)?((键值/8)/3)*4)+4:((键值/8)/3)*4;
int迭代次数=inputString.Length/base64BlockSize;
var arrayList=新的arrayList();
对于(int i=0;i

不知道哪里出了问题。我确定公钥存在。

加密需要公钥,解密需要私钥。如果您想从a向B发送受信任且加密的消息,则使用专用a签名并使用公用B加密。B可以使用公用a验证签名并使用专用B解密。是的。但问题是:我得到了错误的解密(加密到btw)与公众。虽然PK是存在的。但是能够用公钥解密会破坏加密的全部目的,你不这样认为吗?不,因为在数字签名验证过程中使用公钥解密。数字签名提供的是数据认证(完整性)手段,而不是隐私。在数字签名过程中,对内容进行哈希处理,然后使用私钥进行加密。在签名验证过程中,使用公钥对签名进行解密。RSA完美的数学模型允许通过两个密钥进行加密/解密。所以,用公钥解密或用私钥加密是有效的,只是,这只能用于签名和签名验证。我不知道你想要实现什么,但是,你可以查看