/// <summary>
        /// RSA加密
        /// </summary>
        /// <param name="publickey"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        private  string EncryptRSA(string source, string key)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            byte[] cipherbytes;
            rsa.FromXmlString(key);
            cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(source), false); 
            return Convert.ToBase64String(cipherbytes);
        } 别人代码是如此的.很奇怪这句   rsa.FromXmlString key 一定要xml格式吗

解决方案 »

  1.   

    密钥是通过:RSACryptoServiceProvider.ToXmlString()得到的。xml格式不是必须的。你自己定制格式也行
      

  2.   

    自行定制格式的话.如何加密解密  rsa.FromXmlString(key); 替代这一段的效果?有相关可用测试过的代码不
      

  3.   

    你贴的代码就是按照xml保存和读取密钥的。我的意思是你可以不用。Net自带的xml方式密钥,自己定义密钥也可以一般加密的密钥就是一段定长的byte数组,你自己用string转换就可以了。
      

  4.   


            /// <summary>
            /// 使用对称加密技术 DES 解密字符串。
            /// </summary>
            /// <param name="s">要解密的字符串。</param>
            /// <param name="k">解密密钥(长度必须为 8 位)。</param>
            /// <returns>解密后的字符串</returns>
            public static string DESDecrypt(string s, string k)
            {
                DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
                byte[] buffer = new byte[s.Length / 2];
                for (int i = 0; i < (s.Length / 2); i++)
                {
                    int num2 = Convert.ToInt32(s.Substring(i * 2, 2), 0x10);
                    buffer[i] = (byte)num2;
                }
                provider.Key = Encoding.ASCII.GetBytes(k);
                provider.IV = Encoding.ASCII.GetBytes(k);
                MemoryStream stream = new MemoryStream();
                CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write);
                stream2.Write(buffer, 0, buffer.Length);
                stream2.FlushFinalBlock();
                StringBuilder builder = new StringBuilder();
                stream2.Close();
                stream.Close();
                return Encoding.Default.GetString(stream.ToArray());
            }        /// <summary>
            /// 使用对称加密技术 DES 加密字符串。
            /// </summary>
            /// <param name="s">要加密的字符串。</param>
            /// <param name="k">加密密钥(长度必须为 8 位)。</param>
            /// <returns>加密后的字符串</returns>
            public static string DESEncrypt(string s, string k)
            {
                DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
                byte[] bytes = Encoding.Default.GetBytes(s);
                provider.Key = Encoding.ASCII.GetBytes(k);
                provider.IV = Encoding.ASCII.GetBytes(k);
                MemoryStream stream = new MemoryStream();
                CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);
                stream2.Write(bytes, 0, bytes.Length);
                stream2.FlushFinalBlock();
                StringBuilder builder = new StringBuilder();
                foreach (byte num in stream.ToArray())
                {
                    builder.AppendFormat("{0:X2}", num);
                }
                builder.ToString();
                stream2.Close();
                stream.Close();
                return builder.ToString();
            }  此消息通过 【CSDN论坛 Winform测试版】 回复!
      

  5.   

    RSA加密类似,把DES改为RSA即可,只要使用字符串即可。
     此消息通过 【CSDN论坛 Winform测试版】 回复!
      

  6.   

    有一些加密方法我是用的单位底层的.这个RSA第一次接触.而且需要自定义密钥有点晕.又急着用.所以能否提供切实可行的,可直接运行的方法.按你的说法改了一下后.KEY IV等属性 就不对了
      

  7.   

    PS..我这边是java 与.net 接口联调他们已经给定KEY了. 非常长
      

  8.   

    见鬼,居然完全不一样,如果他们只给定了KEY,你先看下KEY的结构如何,MSDN上这么说的:
    在.NET中,RSAParameters(等同于KEY)是由RSACryptoServiceProvider初始化时产生的,可以通过ExportParameters导出后,给另一个RSACryptoServiceProvider导入使用,但是这个RSAParameters
    并未提供任何构造的方法,也就是说,JAVA的KEY与.NET的KEY是完全无法互相转换的。
      

  9.   

    QQ给我一个吧.研究了一下.java 和.net 通用是可以的..但rsa的加密解密很多我不了解QQ上请教你一下?
      

  10.   

    你好,我也遇到了这个问题,我的客服给我的密钥不是XML的,他们是用JAVA做的,但是我是WINFORM程序,我该怎么用他给的公钥和私钥呢?