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;
2 respuestas
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
.
Simplemente puedes hacer esto:
string text = reader.ReadToEnd();
Y quitar el
reader.ReadToEnd();
stream.Seek(0, SeekOrigin.Begin);
Nuevas preguntas
c#
C # (pronunciado "see sharp") es un lenguaje de programación multi-paradigma de alto nivel, estáticamente tipado desarrollado por Microsoft. El código C # generalmente se dirige a la familia de herramientas y tiempos de ejecución .NET de Microsoft, que incluyen .NET Framework, .NET Core y Xamarin, entre otros. Use esta etiqueta para preguntas sobre el código escrito en las especificaciones formales de C # o C #.