C# .Net RSA使用私钥加密

C# .Net RSA使用私钥加密,c#,.net,encryption,rsa,C#,.net,Encryption,Rsa,我发现了类似的问题,但在细节上存在差异,因此我开始新的问题。我必须用X509 RSA私钥加密64个字节。它必须是没有散列的直接加密-就像64字节是散列输出一样。我试过这个: X509Certificate2 cert = new X509Certificate2("my_cert_with_private_key.pfx", "pwd", X509KeyStorageFlags.Exportable); RSACryptoServiceProvider csp = (RSACryptoServi

我发现了类似的问题,但在细节上存在差异,因此我开始新的问题。我必须用X509 RSA私钥加密64个字节。它必须是没有散列的直接加密-就像64字节是散列输出一样。我试过这个:

X509Certificate2 cert = new X509Certificate2("my_cert_with_private_key.pfx", "pwd", X509KeyStorageFlags.Exportable);
RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PrivateKey;
byte[] encrypted = csp.Encrypt(my_data, false);
在多次尝试使用以下方法解密后:

RSACryptoServiceProvider pub = (RSACryptoServiceProvider)cert.PublicKey.Key;
pub.Decrypt(encrypted, false);

我发现csp的加密实际上是用公钥进行的,因为用私钥进行测试解密是可以的。否则我会得到找不到的密钥错误。Net实现似乎假定只能使用公钥进行加密,即使您想使用私钥,它也会使用公钥。他们的想法是使用签名和私钥进行加密。不幸的是,我必须指定哈希算法,并且没有找到如何使用原始模式,即没有哈希。有没有一种方法可以使用不同的类并使用私钥进行简单的加密?

非对称加密的意义不在于使用公钥加密而使用私钥解密吗?您似乎正在尝试相反的方式…使用私钥加密用于数字签名。哈希是缩小大文件所必需的。在我的例子中,我只有64个字节需要签名。此外,这是客户的请求。我无法向他解释在私钥加密之前使用SHA256处理数据更好。正如我在上面所写的,问题在于.Net RSA类的实现。它们是智能的,并且总是用公钥加密。@xanatos-请仔细阅读您上面发布的答案。那里的加密是用公钥加密的。我需要用私钥加密。我用公钥加密没有问题,也不明白你是如何找到这个答案的?为什么你要在不使用哈希的情况下对一些数据进行签名?散列是签名的一个非常重要的部分。@xanatos我收集了很多信息,但在一般情况下,它与签名相当,这使得散列的省略成为一个有趣的问题。假设没有理由不能用私钥对数据进行加密,这只意味着任何拥有公钥的人都可以对其进行解密,这很可能就是本文的重点。