Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 10067|Respuesta: 0

Codificación y decodificación segura de Base64 por URL

[Copiar enlace]
Publicado en 15/11/2019 14:10:48 | | |
Base64 puede transcodificar caracteres binarios en caracteres visibles para transmisión HTTP, pero la transcodificación de Base64 generará "+", "/", "=" y otros caracteres especiales transcodificados por la URL, lo que resulta en inconsistencias entre ambos aspectos.
Podemos reemplazar "+", "/" y "="" por caracteres que no transcodifican URLs antes de enviarlos, y luego volver a colocar estos caracteres tras recibir los datos y luego descifrarlos.


PHP:

    /**

     * Decodificación URL base64

     * '-' -> '+'

     * '_' -> '/'

     * El resto de la longitud de la cuerda %4, complemento '='

     * @param desconocido $string

     */

    Función estática pública urlsafe_b64decode($string) {

        $data = str_replace(array('-','_'),array('+','/'),$string);

        $mod 4 = strlen($data%) % 4;

        si ($mod 4) {

            $data .= substr('====', $mod 4);

        }

        regreso base64_decode($data);

    }

   

    /**

     * URL codificada en base64

     * '+' -> '-'

     * '/' -> '_'

     * '=' -> ''

     * @param desconocido $string

     */

    función urlsafe_b64encode($string) {

        $data = base64_encode($string);

        $data = str_replace(array('+','/','='),array('-','_','',''),$data);

        regresar $data;

    }




OC:



#pragma - Convierte las cadenas "-", "_" en la codificación de saveBase64 a "+", "/", y el complemento de bits con 4 veces la longitud de la cadena "="

+(NSData*)safeUrlBase64Decode:(NSString*)safeUrlbase64Str

{

    // '-' -> '+'

    // '_' -> '/'

    Si es menos de 4 veces la longitud, compensa '='

    NSMutableString * base64Str = [[NSMutableString alloc]initWithString:safeUrlbase64Str];

    base64Str = (NSMutableString * )[base64Str stringByReplacingOccurrencesOfString:@"-" withString:@"+"];

    base64Str = (NSMutableString * )[base64Str stringByReplacingOccurrencesOfString:@"_" withString:@"/"];

    NSIinteger mod4 = base64Str.length % 4;

    if(mod4 > 0)

        [base64Str appendString:[@"====" substringToIndex:(4-mod4)]];

    NSLog(@"Base64 original: %@", base64Str);

    return [GTMBase64 decodeData:[base64Str dataUsingEncoding:NSUTF8StringEncoding]];

   

}



#pragma - La codificación Base64 contiene +, /, = estas cadenas de URL inseguras, por lo que cambia los caracteres

+(NSString*)safeUrlBase64Encode:(NSData*)data

{

    // '+' -> '-'

    // '/' -> '_'

    // '=' -> ''

    NSString * base64Str = [GTMBase64 stringByEncodingData:data];

    NSMutableString * safeBase64Str = [[NSMutableString alloc]initWithString:base64Str];

    safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"+" withString:@"-"];

    safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"/" withString:@"_"];

    safeBase64Str = (NSMutableString * )[safeBase64Str stringByReplacingOccurrencesOfString:@"=" withString:@""];

    NSLog(@"safeBase64encoded:%@", safeBase64Str);

    return safeBase64Str;

}



Java:

Public static String safeUrlBase64Encode(byte[] data){

String encodeBase64 = new BASE64Encoder().encode(data);

String safeBase64Str = encodeBase64.replace('+', '-');

safeBase64Str = safeBase64Str.replace('/', '_');

safeBase64Str = safeBase64Str.replaceAll("=", "");

return safeBase64Str;

}


byte estático público[] safeUrlBase64Decode(final String safeBase64Str){

String base64Str = safeBase64Str.replace('-', '+');

base64Str = base64Str.replace('_', '/');

int mod4 = base64Str.length()%4;

if(mod4 > 0){

base64Str = base64Str + "====".substring(mod4);

}

return new BASE64Decoder().decodeBuffer(base64Str);

}



Para Android, android.utils.Base64 incluye esta función:

Base64.encodeToString(encrypted, Base64.URL_SAFE| Base64.NO_WRAP);

Base64.decode(datos, Base64.URL_SAFE);




Anterior:Juega con una estrategia de seguridad para bloquear cuentas
Próximo:C# conecta sqlserver a dos tipos de cadenas de conexión para la autenticación de Windows y SQLSERVER
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com