none
Memory Stream RRS feed

  • Вопрос

  • есть такой код

    string s = "что-небудь";

     MemoryStream ms = new MemoryStream();
     ms.Write(Encoding.UTF8.GetBytes(s),0,s.Length);

     MemoryStream ms2 = new MemoryStream();
      string s1 = CryptDatas(ms,ms2, iv, key,true);

     

    string CryptDatas(Stream fin, Stream fout, byte[] rijnKey, byte[] rijnIV, bool b)
            {
                try
                {

                    byte[] bin = new byte[100];
                    long totlen = fin.Length;
                    int len = 0;
                    long rdlen = 0;
                    Aes rijn = new AesManaged();
                    CryptoStream encStream = new CryptoStream(fout, rijn.CreateDecryptor(rijnIV, rijnKey), CryptoStreamMode.Write);
                    while (rdlen < totlen)
                    {
                        len = fin.Read(bin, 0, (int)fin.Length);
                        encStream.Write(bin, 0, len);

                        rdlen = rdlen + len;

                    }
                    //Encoding.UTF8.GetString(fout.ToArray(), 0, ms.ToArray().Length);
                    return "";
                }

    проблема в том, что fin.Read не считывает из памяти содержимое потока и не записывает его в bin... по ходу писал всё правильно, а не хочет, подсобите кто знает поскорее плиз!!

     

    1 апреля 2011 г. 19:15

Ответы

Все ответы

  • MemoryStream ms = new MemoryStream();
     ms.Write(Encoding.UTF8.GetBytes(s),0,s.Length);
     ms.Flush();
     MemoryStream ms2 = new MemoryStream();
     string s1 = CryptDatas(ms,ms2, iv, key,true);
    
     
    
    string CryptDatas(Stream fin, Stream fout, byte[] rijnKey, byte[] rijnIV, bool b)
     {
     try
     {
    
     byte[] bin = new byte[100];
     long totlen = fin.Length;
     int len = 0;
     long rdlen = 0;
     Aes rijn = new AesManaged();
     CryptoStream encStream = new CryptoStream(fout, rijn.CreateDecryptor(rijnIV, rijnKey), CryptoStreamMode.Write);
     while (rdlen < totlen)
     {
      len = fin.Read(bin, 0, (int)fin.Length);
      encStream.Write(bin, 0, len);
       rdlen = rdlen + len;  
    } 
     
    // вроде надо закрыть енкрCтрим чтоб все данные перешли в мемори стрим 
    encStream.Close();  
    //Encoding.UTF8.GetString(fout.ToArray(), 0, ms.ToArray().Length); 
    
    return ""; 
    
     }

    Don't forget to mark the correct answer Blog


    1 апреля 2011 г. 21:22
  • все равно не помогает,

    while (rdlen < totlen)
     {
     len = fin.Read(bin, 0, (int)fin.Length);
     encStream.Write(bin, 0, len);
      rdlen = rdlen + len; 
    } 
    етот кусок кода выполняется бесконечно, так как данные при считывании не запысываются в bin
    2 апреля 2011 г. 6:15
  • А если так : 
    do
     {
     len = fin.Read(bin, 0, 100);
     encStream.Write(bin, 0, len);
     rdlen = rdlen + len; 
    } 
    while (len>0)

    Don't forget to mark the correct answer Blog
    2 апреля 2011 г. 7:02
  • все равно не катит

     fin.Read(bin, 0, 100);
    - етот код должен считывать з Memory Stream данные и записывать их в буфер bin, а он не читает, смотрел отладкой после етого шага bin остается пустым!!!!
    использую Silverlight
    2 апреля 2011 г. 10:52
  • Нужно для первого потока выставить позицию в начало:

    ms.Seek(0, SeekOrigin.Begin);

    http://msdn.microsoft.com/ru-ru/library/system.io.stream.seek.aspx



    4 апреля 2011 г. 5:43