Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 10067|Отговор: 0

URL secure Base64 кодиране, декодиране

[Копирай линк]
Публикувано в 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);

        }

        return base64_decode($data);

    }

   

    /**

     * URL base64 кодиран

     * '+' -> '-'

     * '/' -> '_'

     * '=' -> ''

     * @param неизвестен $string

     */

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

        $data = base64_encode($string);

        $data = str_replace(масив('+','/','='),array('-','_',''),$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);

    return safeBase64Str;

}



Java:

public static String safeUrlBase64Encode(byte[] data){

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

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

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

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

return safeBase64Str;

}


public static byte[] 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 и SQL Server автентикация
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com