第一个问题 怎么获取私钥并进行 md5withRSA  加密
要加密的字符串 如:123456abc
为啥我获取到的私钥.ToString()是 System.Security.Cryptography.RSACryptoServiceProvider这个类型的小白确实不懂 证书是.pfx格式的
有做过相关的没?
求思路 求代码话说java的例子大大的有 就是C#的找了N久没发现Bouncy Castle这个是英文的鸭梨山大

解决方案 »

  1.   

    System.Security.Cryptography.RSACryptoServiceProvider这东西可以直接用来加密。点一下。
      

  2.   

    好吧还是贴代码吧  //创建证书文件
      X509Certificate2 objx5092 = new   X509Certificate2(Server.MapPath("/Member/Webservice/123.pfx"),"123456");
    //下面是刚从网上找的 不知道正不正确
    System.Security.Cryptography.AsymmetricAlgorithm aal = objx5092.PrivateKey;
     try
                {                System.Security.Cryptography.RSACryptoServiceProvider rsa = objx5092.PrivateKey.KeyExchangeAlgorithm;
                    byte[] data = Encoding.ASCII.GetBytes("aaaaa");
                    byte[] signature = System.Convert.FromBase64String(token);
                    rsa.VerifyData(data, "MD5", signature);
                }
                catch (Exception aaa)
                { 
                    
                }
      

  3.   


    用E(X)表示用RSA算法对明文X加密(即用公钥编码),D(X)表示用RSA算法对密文X解密(即用私钥编码),用H(X)表示用MD5(或其它散列算法)对X散列:  
     对文档X签名:  
      
     R  =  D(H(X));  
      
     验证文档X和签名R是否一致:  
     H(X)  ==  E(R)  
      
     由于D要用私钥而E只用公钥,结果只有私钥持有者可以签名,而所有的公钥持有者都可以进行验证。其实只用RSA就可以完成签名:  
     R  =  D(X)  
     X  ==  E(R)  
     之所以加入散列步骤主要是为了:  
     1:减小签名长度。  
     2:防止对RSA的选择明文攻击原文地址 
      

  4.   

    这个是银联推荐 md5withRSA 问了下谷哥 http://www.bouncycastle.org/csharp/ 有一个 英文不给力o(︶︿︶)o 唉现在要用私钥进行签名 不懂 加密学昨天下午才接触到 今天还要搞定 SSL 还要部署环境 当然这个也不懂
      

  5.   

    lz君这个问题描述不好描述啊。生拉硬拽各种尝试吧。http://blog.sina.com.cn/s/blog_573287450100q9k1.html
    看看这个的
      

  6.   

    其实 我想给你说的是一大堆,但是 我还上代码 和链接把。其实很简单, 你自己看下吧
    说明 图例 及代码
    http://jasondct.blog.163.com/blog/static/818206732011113102453543/
      

  7.   

    下面代码 你复制过来用吧。需要稍微修改一下。最好自己做dll
    http://jasondct.blog.163.com/blog/static/81820673201111310133483/
      

  8.   

    额 关于4楼的代码 修正一下
    try
    {
      //创建证书文件
                X509Certificate2 objx5092 = new X509Certificate2(Server.MapPath("/Member/Webservice/123.pfx"),"123456");//取出私钥
                System.Security.Cryptography.RSACryptoServiceProvider rsa = objx5092.PrivateKey as System .Security .Cryptography .RSACryptoServiceProvider;
    //将要签名的要素转化为byte[]
                byte[] data = Encoding.ASCII.GetBytes("aaaaa");
     //md5 你懂的 返回byte[]
                byte[] bb = rsa .SignData(data,"MD5");
     //将md5 之后的数据进行base64编码 必须的 返回的就是已签名的数据 
                byte[] signature = System.Convert.FromBase64String(bb);
     //data 已签名的数据 signature 要验证的数据
                    
                    //bool str = rsa.VerifyData(data, "MD5", signature);//这一步俺不做 俺只做签名 验证那不是俺干的事                //不知道这样对不对  验证中...........................................................................................................................................                
    }
    catch 

    }
      

  9.   

    jason_dct,sunzongbao2007
    都深藏不露的高手啊 
      

  10.   


    X509Certificate2 objx5092 = new X509Certificate2(@"C:\Users\Administrator\Desktop\ddddd.pfx","12345");
                System.Security.Cryptography.RSACryptoServiceProvider rsa = objx5092.PrivateKey as RSACryptoServiceProvider;            byte[] data = Encoding.UTF8.GetBytes("Today");
                byte[] hashvalue = rsa.SignData(data, "MD5");            X509Certificate2 pub = new X509Certificate2(@"C:\Users\Administrator\Desktop\ppppp.cer");
                RSACryptoServiceProvider rsaPublic = pub.PublicKey.Key as RSACryptoServiceProvider;
                bool a = rsaPublic.VerifyData(data, "MD5", hashvalue);这样才是一来一回。
    ddddd.pfx是带私钥可加密的。
    ppppp.cer是公钥证书。哈哈 我可不是什么高手。我是打酱油的。
      

  11.   

    私钥加密是 解决了 
    就剩下ssl 客户端部署了ssl 访问Webservice o(︶︿︶)o 唉日落结贴
      

  12.   


    是webservice的地址类似https://host:port/servicename这样子的么?
      

  13.   


    https://192.168.8.1:90/CardWebServiceProvider?wsdl
    我用的是这样子ssl 我google了多少 java版的啊 C#版的绝迹了 密钥库,证书库 这些到底怎么用啊 ...
      

  14.   


    如果webservice是hhtps的,那C#在用这个webservice的时候如果是config配置型的,要跟服务器设置成一样的协议。
    如果是直接的Request的,那么需要一段代码类似下面的,来验证证书public static void Main(string[] argv)
    {
      ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ServerSSLCertificateValidation);
    }
     
     
    private bool ServerSSLCertificateValidation(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors errors)
            { // Always accept
                return true;
            }
      

  15.   

    主要是这个:ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ServerSSLCertificateValidation);
      

  16.   

    唉 银联给的密钥库,证书库 都不会用证书验证可以了 就是ssl验证不通过 一直500 内部服务器错误
      

  17.   

    http://msdn.microsoft.com/zh-cn/library/system.net.security(v=vs.90).aspx找到一个明天再实验SSL   结贴先
      

  18.   


    内部服务错误一般都是程序throw exception了,要不是就是web site应用池的用户权限不够运行你的程序的。说到底还是程序异常了。往你的Global.asax里面的On Error还是On Exception方法来的里面写个文本输出,记录下Exception的messge,看看到底怎么了。