online decodificar c# .net php base64

c# - decodificar base64 php online



C#a PHP base64 codifica/decodifica (6)

Cª#

this is a <B>long</b>string. and lets make this a3214 ad0-3214 0czcx 909340 zxci 0324#$@#$%%13244513123

se convierte en

dGhpcyBpcyBhIDxCPmxvbmc8L2I+c3RyaW5nLiBhbmQgbGV0cyBtYWtlIHRoaXMgYTMyMTQgYWQwLTMyMTQgMGN6Y3ggOTA5MzQwIHp4Y2kgMDMyNCMkQCMkJSUxMzI0NDUxMzEyMw==

para mi. y creo que + está rompiendo todo.

Así que tengo esta aplicación c # que necesita hacer ping a mi servidor web que está ejecutando la pila linux / php.
Estoy teniendo problemas con la forma c # de la base 64 codificando bytes.

mi código c # es como:

byte[] encbuff = System.Text.Encoding.UTF8.GetBytes("the string"); String enc = Convert.ToBase64String(encbuff);

y lado php:

$data = $_REQUEST[''in'']; $raw = base64_decode($data);

con cadenas más grandes, más de 100 caracteres falla. Creo que esto se debe a c # agregando ''+'' s en la codificación, pero no estoy seguro. alguna pista


Convert.ToBase64String no parece agregar nada extra por lo que puedo ver. Por ejemplo:

byte[] bytes = new byte[1000]; Console.WriteLine(Convert.ToBase64String(bytes));

El código anterior imprime una carga de AAAA con == al final, que es correcto.

Mi suposición es que $data en el lado PHP no contiene lo que enc hizo en el lado C # - compruébalos uno contra el otro.


Probablemente debas URL Codifica tu cadena Base64 en el lado C # antes de enviarla.

Y URL Decodifíquelo en el lado php antes de descifrarlo base64.

Lado C #

byte[] encbuff = System.Text.Encoding.UTF8.GetBytes("the string"); string enc = Convert.ToBase64String(encbuff); string urlenc = Server.UrlEncode(enc);

y lado php:

$data = $_REQUEST[''in'']; $decdata = urldecode($data); $raw = base64_decode($decdata);


Tenga en cuenta que + es un carácter válido en la codificación base64, pero cuando se usa en las URL a menudo se traduce nuevamente a un espacio. Este espacio puede confundir su función PHP base64_decode .

Tienes dos enfoques para resolver este problema:

  • Use% -encoding para codificar el carácter + antes de que salga de su aplicación C #.
  • En su aplicación PHP, traduzca los caracteres espaciales a + antes de pasar a base64_decode.

La primera opción es probablemente tu mejor opción.


El lado PHP debe ser: $ data = $ _REQUEST [''in'']; // $ decdata = urldecode ($ data); $ raw = base64_decode ($ decdata);

El $ _REQUEST ya debería estar URLdecoded.


Esto parece funcionar, reemplazando + con% 2B ...

private string HTTPPost(string URL, Dictionary<string, string> FormData) { UTF8Encoding UTF8encoding = new UTF8Encoding(); string postData = ""; foreach (KeyValuePair<String, String> entry in FormData) { postData += entry.Key + "=" + entry.Value + "&"; } postData = postData.Remove(postData.Length - 1); //urlencode replace (+) with (%2B) so it will not be changed to space ( ) postData = postData.Replace("+", "%2B"); byte[] data = UTF8encoding.GetBytes(postData); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; Stream strm = request.GetRequestStream(); // Send the data. strm.Write(data, 0, data.Length); strm.Close(); WebResponse rsp = null; // Send the data to the webserver rsp = request.GetResponse(); StreamReader rspStream = new StreamReader(rsp.GetResponseStream()); string response = rspStream.ReadToEnd(); return response; }