明显的问题:
strtemp=strtemp + Encoding.ASCII.GetString(temp);
这个不行

解决方案 »

  1.   

    public static void Encrypt() {
    RSACryptoServiceProvider rsac = new RSACryptoServiceProvider();
    byte[] src = new byte[64]; FileStream fs = new FileStream("miwen.txt", FileMode.Open, FileAccess.Read);
    FileStream res = new FileStream("Result.txt", FileMode.Create, FileAccess.Write);
    int len; MemoryStream ms = new MemoryStream();
    while ((len = fs.Read(src, 0, 64)) > 0) 
    {
    byte[] temp = new byte[len];
    Array.Copy(src, 0, temp, 0, len);
    temp = rsac.Encrypt(temp, false);
    ms.Write(temp, 0, temp.Length);
    res.Write(temp, 0, temp.Length);
    }
    fs.Close();
    res.Close();
    StreamWriter sw = new StreamWriter("RSA.key");
    sw.Write(rsac.ToXmlString(true));
    sw.Close();
    }public static byte[] Decrypt() {
    StreamReader sr = new StreamReader("RSA.key");
    String str = sr.ReadToEnd();
    sr.Close();
    RSACryptoServiceProvider rsac = new RSACryptoServiceProvider();
    rsac.FromXmlString(str);

    FileStream fs = new FileStream("Result.txt", FileMode.Open, FileAccess.Read);
    byte[] temp1 = new byte[rsac.KeySize / 8];     
    int len;
    MemoryStream ms = new MemoryStream();
    while ((len = fs.Read(temp1, 0, temp1.Length)) > 0) {
    byte[] src = new byte[len];
    Buffer.BlockCopy(temp1, 0, src, 0, src.Length);
    src = rsac.Decrypt(src, false);
    ms.Write(src, 0, src.Length);
    }
    return ms.ToArray();
    }
      

  2.   

    xixi 最近整天上来,是不是最近很有空啊?害得我都没生意做了。
      

  3.   

    呵呵,你的答案可能人家会不满意哦。人家明显要通过Base64保存……而且里面可能有点其它问题,正在改……
      

  4.   

    to sumtec(Psydian):
    仔细看看用到Base64的地方,其实没有什么意义,所以我才去掉的。
      

  5.   

    呵呵,如果人家想把这段密文通过XML和远程服务/客户进行交换呢?还是要有Base64吧?
      

  6.   

    呵呵,终于好了,不过不知道对不对,仅仅是手写的,没有调试过。
    另外,我不太明白xixi的代码Encrypt里面的ms有什么作用?似乎是去掉Base64遗留下来的?
    xixi来看一下有什么不妥的吧。public static void Encrypt() {
    RSACryptoServiceProvider rsac = new RSACryptoServiceProvider();
    byte[] src = new byte[64];
    temp[] temp; // #1 re-located, modified
            string sResult; // #2 add FileStream fs = new FileStream("miwen.txt", FileMode.Open, FileAccess.Read);
    FileStream res = new FileStream("Result.txt", FileMode.Create, FileAccess.Write);
    int len;
    MemoryStream ms = new MemoryStream(); while ((len = fs.Read(src, 0, 64)) > 0) 
    {
    temp = new byte[len];
    Array.Copy(src, 0, temp, 0, len);
    temp = rsac.Encrypt(temp, false);
                    ms.Write(temp, 0, temp.Length); 
    // #3 delete
    }
    fs.Close();
            
            temp = ms.ToArray(); // #4 add
    sResult = Convert.ToBase64String(temp); // #5 add
            res.Write(System.Text.Encoding.ASCII.GetBytes(sResult)); // #6 add res.Close();
    StreamWriter sw = new StreamWriter("RSA.key");
    sw.Write(rsac.ToXmlString(true));
    sw.Close();
    }public static byte[] Decrypt() {
    StreamReader sr = new StreamReader("RSA.key");
    String str  = sr.ReadToEnd();
    sr.Close();
    RSACryptoServiceProvider rsac = new RSACryptoServiceProvider();
    rsac.FromXmlString(str);

    byte[] temp; // #1 re-located, renamed
    byte[] src; // #2 re-located, modified
    int len; // #2 re-located
    MemoryStream msBuff; // #3 re-located, modified
            MemoryStream msResult = new MemoryStream(); // #4 add
            string sBase64; // #5 add
    FileStream fs = new FileStream("Result.txt", FileMode.Open, FileAccess.Read);
    len = fs.Length; // #6 add
    temp = new byte[len]; // #7 add
    fs.Read(temp, 0, len); // #8 add
    fs.Close(); // #9 re-located sBase64 = System.Text.Encoding.ASCII.GetString(temp); // #10 add
            msBuff = new MemoryStream(Convert.FromBase64String(sBase64)); // #11 add(modified)
            
    temp = new byte[rsac.KeySize / 8]; // #12 modified
    while ((len = msBuff.Read(temp, 0, temp.Length)) > 0) { // #12 modified
    src = new byte[len];
    Array.Copy(temp, 0, src, 0, len); // #13 modified
    src = rsac.Decrypt(src, false);
    msResult.Write(src, 0, src.Length); // #14 modified
    }
    return msResult.ToArray(); // #15 modified
    }
      

  7.   

    http://expert.csdn.net/Expert/topic/2483/2483162.xml?temp=.3406946
      

  8.   

    sumtec(Psydian)这句有问题!     len = fs.Length; // #6 add
    回家仔细研究研究