如题,在网上找到一段代码有两个方法,加密是用公钥,解密用私钥,网上流传的不是“私钥加密,公钥解密”吗!很是困惑!
  public static string RSAEncryptString(string publicKey, string encryptString, bool isXml, bool is16)
        {
            try
            {
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
                {
                    byte[] plainTextArray, cypherTextArray;
                    if (isXml)
                        rsa.FromXmlString(publicKey);
                    else
                        rsa.ImportCspBlob(Encoding.Default.GetBytes(publicKey));
                    plainTextArray = (new UnicodeEncoding()).GetBytes(encryptString);//Encoding.Default.GetBytes(encryptString);
                    cypherTextArray = rsa.Encrypt(plainTextArray, false);
.....

解决方案 »

  1.   

    lz可以看一下这个:http://blog.csdn.net/gisfarmer/archive/2009/01/09/3740793.aspx
      

  2.   

    交换一下就可以了。RSA可以生成一个密码对,其中一个是公钥一个是私钥。加密用公钥,则解密需要私钥,加密用私钥,则解密用公钥。所谓的公钥加密,私钥解密,一般是用于安全密码种子交换上的。数字签名中,采用的是私钥加密,公钥解密验签。
      

  3.   

    你可以 加密用公钥,则解密需要私钥
    达到你所想要的要求呀
    A B 生成一个密钥对 
    A把公钥发给B
    B把公钥发给A
    A要给B发数据就用 B的公钥加密数据
    B要给A发数据就用 A的公钥加密数据
    这样不就实现了你想要的吗
      

  4.   

    用RSACryptoServiceProvider签名验签 
       byte[] messagebytes = Encoding.UTF8.GetBytes("luo罗"); 
               RSACryptoServiceProvider oRSA = new RSACryptoServiceProvider(); 
               string privatekey = oRSA.ToXmlString(true); 
               string publickey = oRSA.ToXmlString(false); 
               
                //私钥签名 
                RSACryptoServiceProvider oRSA3 = new RSACryptoServiceProvider(); 
                oRSA3.FromXmlString(privatekey); 
                byte[] AOutput = oRSA3.SignData(messagebytes, "SHA1"); 
                //公钥验证 
                RSACryptoServiceProvider oRSA4 = new RSACryptoServiceProvider(); 
                oRSA4.FromXmlString(publickey); 
                bool bVerify = oRSA4.VerifyData(messagebytes, "SHA1", AOutput); 
      

  5.   

    3楼真TM见鬼,你用私钥加的密可以用公钥去解吗?你TM自己去试一下,不知道就不要乱P
      

  6.   

    私钥加密公钥解密的好处:
    公司做了一个软件,客户要买这个软件放到客户的服务器上运行,但购买后公司要给用户一个授权文件(该文件是用用户服务器cpu 编号和私钥生成的文件)是的,文件是公开的,公钥也是公开的,但是解密出来后,公司的软件就会去把解密的信息和服务器的cpu 编号对比,从而达到验证的功能,当然这种可以用数字签名实现。
    但如果授权文件中还有一个授权时间呢?也就是比较当前时间,那就得用私钥加密并用公钥去解密出来了,得到时间后在去比较。
      

  7.   

    我的方法,http://www.cnblogs.com/hhh/archive/2011/06/03/2070692.html