Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 10067|Ответ: 0

URL secure Base64 encoding, decoding

[Скопировать ссылку]
Опубликовано 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;

        если ($mod 4) {

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

        }

        возврат base64_decode($data);

    }

   

    /**

     * URL base64 encoded

     * '+' -> '-'

     * '/' -> '_'

     * '=' -> ''

     * @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.length % 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);

    вернуть safeBase64Str;

}



Java:

public static String safeUrlBase64Encode(byte[] data){

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

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

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

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

вернуть safeBase64Str;

}


публичный статический байт[] 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(данные, Base64.URL_SAFE);




Предыдущий:Играйте с помощью стратегии безопасности блокировки аккаунта
Следующий:C# соединяет sqlserver с двумя типами строк соединения для аутентификации Windows и sqlserver
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com