Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 10067|Răspunde: 0

Codare și decodare Base64 cu siguranță URL

[Copiază linkul]
Postat pe 15.11.2019 14:10:48 | | |
Base64 poate transcodifica caractere binare în caractere vizibile pentru transmiterea HTTP, dar transcodarea Base64 va genera "+", "/", "=" și alte caractere speciale transcodificate de URL, rezultând inconsistențe între cele două aspecte.
Putem înlocui "+", "/" și "=" cu caractere care nu transcodează URL-uri înainte de trimitere, apoi să înlocuim aceste caractere după ce primim datele și apoi să le decodăm.


PHP:

    /**

     * Decodare URL base64

     * '-' -> '+'

     * '_' -> '/'

     * Restul lungimii corzii %4, completează '='

     * @param necunoscut $string

     */

    Funcție statică publică urlsafe_b64decode($string) {

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

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

        dacă ($mod 4) {

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

        }

        întoarcerea base64_decode($data);

    }

   

    /**

     * URL codificat base64

     * '+' -> '-'

     * '/' -> '_'

     * '=' -> ''

     * @param necunoscut $string

     */

    funcția urlsafe_b64encode($string) {

        $data = base64_encode($string);

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

        returnarea $data;

    }




OC:



#pragma - Convertește șirurile "-", "_" din codificarea saveBase64 în "+", "/" și complementul de biți cu 4 ori lungimea șirului "="

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

{

    // '-' -> '+'

    // '_' -> '/'

    Dacă are mai puțin de 4 ori lungimea, compensează pentru '='

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

    base64Str = (NSMutableString * )[base64Str stringByReplacementOccurrencesOfString:@"-" cuString:@"+"];

    base64Str = (NSMutableString * )[base64Str stringByReplasingOccurrencesOfString:@"_" cuString:@"/"];

    NSIinteger mod4 = base64Str.length % 4;

    if(mod4 > 0)

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

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

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

   

}



#pragma - Codificarea Base64 conține +, /, = aceste șiruri URL nesigure, deci schimbă caracterele

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

{

    // '+' -> '-'

    // '/' -> '_'

    // '=' -> ''

    NSString * base64Str = [GTMBase64 stringByEncodingData:data];

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

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

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

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

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

    returnează safeBase64Str;

}



Java:

public static String safeUrlBase64Encode(byte[] data){

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

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

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

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

returnează safeBase64Str;

}


octet static public[] 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);

}



Pentru Android, android.utils.Base64 vine cu această funcție:

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

Base64.decode(data, Base64.URL_SAFE);




Precedent:Joacă-te cu o strategie de securitate pentru blocarea conturilor
Următor:C# conectează sqlserver la două tipuri de șiruri de conexiuni pentru autentificarea Windows și SQLSERVER
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com