"Base 64 es un sistema de numeración posicional que usa 64 como base. Es la mayor potencia que puede ser representada usando únicamente los caracteres imprimibles de ASCII. Esto ha propiciado su uso para codificación de correos electrónicos, PGP y otras aplicaciones" Fuente Wikipedia
El error mostrado es el siguiente:
Texto en formato base 64:
string cadena = "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4"
Para solucionar este error, se implementa lo siguiente:
int mod4 = cadena.Length % 4;
if (mod4 > 0)
{
cadena += new string('=', 4 - mod4);
}
Con esto la cadena termina de este modo:
"TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4="
Se notará que al final termina en el caracter "=", esto es usado debido a que este formato solo acepta múltiplos de 4, por lo tanto el texto debe completarse con este caracter.
Hola, como estas ?. gracias por tu aporte, ahora para desencriptar ?, como sería ?
ResponderBorrarHola, Hector. Para desencriptar hacemos lo siguiente:
ResponderBorrarstring[] token; // for split 3 parts
string base64Content; // base64 ready for deserialize
base64Content = Encoding.UTF8.GetString(Convert.FromBase64String(token[1]));
base64Content = base64Content.Replace("\"[", "[").Replace("]\"", "]").Replace("\\", "");
Y si lo deseas Deserializar a un modelo (ApiUser sería un model de prueba, y string de base 64 debe tener la misma estructura), prueba con esto:
ApiUser user;
user = JsonConvert.DeserializeObject(base64Content);