Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 10067|Відповідь: 0

URL secure Base64 encoding, декодування

[Копіювати посилання]
Опубліковано 15.11.2019 14:10:48 | | |
Base64 може транскодувати бінарні символи у видимі для передачі через HTTP, але транскодування Base64 генерує "+", "/", "=" та інші спеціальні символи, транскодовані URL, що призводить до неузгодженості між цими двома аспектами.
Ми можемо замінити "+", "/" і "=" на символи, які не транскодують URL перед відправленням, а потім повернути ці символи назад після отримання даних і декодувати їх.


PHP:

    /**

     * Декодування URL base64

     * '-' -> '+'

     * '_' -> '/'

     * Залишок довжини рядка %4, доповнення '='

     * @param невідомий $string

     */

    публічна статична функція urlsafe_b64decode($string) {

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

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

        if ($mod 4) {

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

        }

        повернення base64_decode($data);

    }

   

    /**

     * URL base64 закодовано

     * '+' -> '-'

     * '/' -> '_'

     * '=' -> ''

     * @param невідомий $string

     */

    функція urlsafe_b64encode($string) {

        $data = base64_encode($string);

        $data = str_replace(масив('+','/','='),масив('-','_',''),$data);

        повернення $data;

    }




OC:



#pragma - Перетворити рядки "-", "_" у кодуванні saveBase64 у "+", "/", а бітове доповнення у 4 рази довжиною рядка "="

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

{

    // '-' -> '+'

    // '_' -> '/'

    Якщо довжина менша за 4 рази, компенсуйте '='

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

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

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

    NSInteger mod4 = base64Str.довжину % 4;

    if(mod4 > 0)

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

    NSLog(@"Base64 оригінал: %@", base64Str);

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

   

}



#pragma - Кодування Base64 містить +, /, = ці незахищені рядки URL, тому змінюйте символи

+(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);

    повернути безпечноBase64Str;

}



Java:

public static String safeUrlBase64Encode(byte[] data){

String encodeBase64 = новий BASE64Encoder().encode(data);

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

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

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

повернути безпечноBase64Str;

}


публічний статичний байт[] safeUrlBase64Decode(final String safeBase64Str){

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

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

int mod4 = base64Str.length()%4;

if(mod4 > 0){

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

}

повернути новий BASE64Decoder().decodeBuffer(base64Str);

}



Для Android android.utils.Base64 має таку функцію:

Base64.encodeToString(зашифровано, Base64.URL_SAFE| Base64.NO_WRAP);

Base64.decode(data, Base64.URL_SAFE);




Попередній:Грайте зі стратегією безпеки блокування акаунта
Наступний:C# з'єднує sqlserver з двома типами рядків з'єднання для автентифікації Windows та sqlserver
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com