Pregunta

Sé que es un problema muy tonto ya que todavía soy un novato.

Caso :
Cadena A: una cadena de salida de un algoritmo de cifrado (contiene caracteres especiales)
Cadena B: una cadena de salida de una función hash de la cadena A (contiene caracteres especiales)

String C = A + "|" + B;

Problema :
Quiero enviarlos juntos desde el remitente como String C para poder separarlos en el receptor
Pero la cadena A&B May contiene mi separador "|"

Entonces, ¿qué me sugieres? [ C#

¿Fue útil?

Solución

Una opción sería convertir la salida de la herramienta de cifrado (que con suerte devuelve bytes sin procesar) en algo como base64 usando la función convert.tobase64String, que debería ser segura de usar "|" con. Sin embargo, pierde la eficiencia del espacio, ya que Base64 desperdicia una buena cantidad de espacio, pero si está tratando con pequeños datos, estaría bien.

Si su código de cifrado hace/no puede devolver bytes, tendría que convertirlo a bytes primero usando el codificador apropiado, es decir, coding.ascii.getBytes () si su cadena está en codificación ASCII.

//On the sender side
byte[] bytesA = Encoding.Default.GetBytes(A);
byte[] bytesB = Encoding.Default.GetBytes(B);
string encA = Convert.ToBase64String(bytesA);
string encB = Convert.ToBase64String(bytesB);

string C = encA + "|" + encB;

//On the receiver side
string[] parts = C.Split('|');
string A = Encoding.Default.GetString(Convert.FromBase64String(parts[0]));
string B = Encoding.Default.GetString(Convert.FromBase64String(parts[1]));

Otros consejos

Podrías enodar la longitud de la primera cadena en los primeros 3 caracteres. Luego usa la longitud en el receptor para dividir las cadenas.

No es bonita, pero funciona.

Podrías escapar de todas las tuberías de la cadena C

p.ej

  • Define "=" Como personaje de escape (podría usar "", lo que sería típico, pero eso realmente se meterá contigo, ya que también es un personaje de escape para cadenas en C#)
  • Reemplace todos los "=" en las cadenas A y B con "= E" (e para igual)
  • Reemplace todo "|" En las cuerdas A y B con "= P" (P para tubería)
  • Únase a ellos junto con la tubería

Eso garantizará que no tenga tuberías en su cadena, excepto la que se une A y B, pero también le permitirá dividirlos en el otro lado y restaurar todas las tuberías existentes a sus lugares originales. Simplemente revertir el orden de las operaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top