我使用由makecert同时具有私有和公共密钥生成的证书。 Java端使用该公钥对数据进行加密和解密的.NET回来。
我试图解密Java的加密的64位编码的字符串,并得到坏数据。
要查看是否一切都很好on.Net结束,我弗里斯特试图与公钥来加密,然后用私人使用相同的证书解密。 我的代码看起来是这样的。
X509Certificate2 cert = GetCert(key, StoreName.My, StoreLocation.LocalMachine);
RSACryptoServiceProvider provider = (RSACryptoServiceProvider)cert.PrivateKey;
RSACryptoServiceProvider publicprovider = (RSACryptoServiceProvider)cert.PublicKey.Key;
if (cert.HasPrivateKey)
MessageBox.Show("Got private key");
byte[] encrypted = publicprovider.Encrypt(Encoding.UTF8.GetBytes(text), false);
byte[] decryptedBytes = provider.Decrypt(encrypted, false);
即使在这里,我得到的错误。 我这么想吗?
该证书看起来既公钥和私钥有效。
我有一个自签名的证书同样的问题,这个问题是我是产生与交换机的证书-sky signature
代替-sky exchange
(您使用签名签名和交换加密/解密)
这里是我的全部命令makecert的作品:
makecert -r -pe -a sha1 -n "CN=MyName" -ss my -sr CurrentUser -sky exchange
下面的代码工作正常,我:
RSACryptoServiceProvider privateKey = new RSACryptoServiceProvider();
privateKey.FromXmlString("<RSAKeyValue><Modulus>wL8s+C8SnnlaaqR+VsyijmxOJOARNa4o7ZNsqfy3+9J9Ol2JNSjjMfQWoUnFtClzJBlZhU5KtuazQe8ZKXTX9YvKoJdRhlsonZkC04qiTMdO/FZIH00GrCRxeQ7XDnQnvPB9Bdsvs//7zrY3f7eLIkpIyK9cQHU+5jjJd5IT0eE=</Modulus><Exponent>AQAB</Exponent><P>83xxN7jvpg5z16pxz2tIQIdqd/EfmikR9Q2TjG2tosWkUSvtyx0xHZ9EqdTUbSGZZ+jgrabzkafYc7Mplylwew==</P><Q>yqcnYSZEXHwJvRWi2V09PNEENTozQZywcFptUUGar9TciaQvoNv3lpnfzUKNBRdhzq4lImxkamajZlTWE5buUw==</Q><DP>37HqilkbwyHwB6mOGhPkM3S1ujAK6qTk3JB2iEOTjMGrru9+7maJYz+Z47Wm3ARMXgyzrpZ9m8nqsJFfmoL11Q==</DP><DQ>v285tv8kMs2FkZYfuP/oOkwkkneBNejjj68Md2bmzlThZDCyQV2pvB1tmgPVHUsiPNCrCaKlFRISJzfa5rR8Ow==</DQ><InverseQ>fgJE2TRe/SS+YqW0/I+FtHrdfbbao0/R3pHD4r4oceZQUemlBgZ7DxOAetebHKthlOdjGkmfWYB8EU4XoWggqw==</InverseQ><D>FMLCwjy3wbAKiCANp6XFAJgz1o7365NFv0k41BpvasViTa4TgFFWH2ROJ7M9g0lPqJy+YrhrHcY9mqV5TVjTheQp0JeckrgO2B39XngPMAMMdne3rWGpf0Pfbj3FLfchMk6XYDXSZzCS2CmSeRA4aBMb+4R3YurixyJLrnGRMH0=</D></RSAKeyValue>");
RSACryptoServiceProvider publicKey = new RSACryptoServiceProvider();
publicKey.FromXmlString("<RSAKeyValue><Modulus>wL8s+C8SnnlaaqR+VsyijmxOJOARNa4o7ZNsqfy3+9J9Ol2JNSjjMfQWoUnFtClzJBlZhU5KtuazQe8ZKXTX9YvKoJdRhlsonZkC04qiTMdO/FZIH00GrCRxeQ7XDnQnvPB9Bdsvs//7zrY3f7eLIkpIyK9cQHU+5jjJd5IT0eE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>");
{
string text = "foo";
byte[] encrypted = publicKey.Encrypt(Encoding.UTF8.GetBytes(text), false);
byte[] decryptedBytes = privateKey.Decrypt(encrypted, false);
}
你能仔细检查导出的私钥是从cert.PrivateKey和公钥是由cert.PublicKey.Key?
我碰到这个页面的时候,我试图找到使用C#X509证书和RSA makcert用法的例子迷迷糊糊的,不幸的是它仅提供了解决方案的一部分。 我把所有的位一起在博客中,人们可能会感兴趣的,并且它可以在这里找到: http://nick-howard.blogspot.com/2011/05/makecert-x509-certificates-and-rsa。 HTML
我终于发现了问题。 我并没有把关键makecert将其定义为RSA加密密钥。