Estoy leyendo desde MemoryStream y luego vuelvo a convertir a una cadena, pero el valor es (""). Leí la documentación de Microsoft sobre StreamReader pero no entendí exactamente lo que necesito hacer para evitar esto.

Aquí está mi código:

byte[] bytee = Encoding.UTF8.GetBytes(user);
MemoryStream stream = new MemoryStream(bytee );

MemoryStream original =  Encryption.SymmetricEncrypt(stream);

StreamReader reader = new StreamReader(original);
reader.ReadToEnd();
stream.Seek(0, SeekOrigin.Begin);
string text = reader.ReadToEnd();
user = text;
1
User89 24 dic. 2019 a las 19:24

2 respuestas

La mejor respuesta

Hay dos problemas aquí:

  • las posiciones relativas de la corriente y el lector
  • si los contenidos son en realidad texto

Este último es un problema mayor; la mayoría de las API criptográficas no están basadas en texto , por lo que usar un lector de texto es simplemente incorrecto. Como se trata de un MemoryStream, tenemos otra opción que resuelve ambos problemas de una vez:

  • acceder al búfer sin procesar y codificar en base 64 la carga útil binaria

Código:

string s = Convert.ToBase64String(
    original.GetBuffer(), 0, (int)original.Length);

Para revertir esto, use Convert.FromBase64String, y use byte[] en el constructor de un nuevo MemoryStream.

1
Marc Gravell 24 dic. 2019 a las 17:51

Simplemente puedes hacer esto:

string text = reader.ReadToEnd();

Y quitar el

reader.ReadToEnd();
 stream.Seek(0, SeekOrigin.Begin);
1
Gauravsa 24 dic. 2019 a las 16:41