Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 10067|Απάντηση: 0

Ασφαλής κωδικοποίηση URL Base64, αποκωδικοποίηση

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 15/11/2019 2:10:48 μ.μ. | | |
Το Base64 μπορεί να μετατρέψει δυαδικούς χαρακτήρες σε ορατούς χαρακτήρες για μετάδοση HTTP, αλλά η διακωδικοποίηση Base64 θα δημιουργήσει "+", "/", "=" και άλλους ειδικούς χαρακτήρες που διακωδικοποιούνται από τη διεύθυνση URL, με αποτέλεσμα την ασυνέπεια μεταξύ των δύο πτυχών.
Μπορούμε να αντικαταστήσουμε τα "+", "/" και "=" με χαρακτήρες που δεν διακωδικοποιούν διευθύνσεις URL πριν από την αποστολή και, στη συνέχεια, να αντικαταστήσουμε αυτούς τους χαρακτήρες μετά τη λήψη των δεδομένων και στη συνέχεια να τους αποκωδικοποιήσουμε.


Η PHP:

    /**

     * Αποκωδικοποίηση URL base64

     * '-' -> '+'

     * '_' -> '/'

     * Το υπόλοιπο μήκος συμβολοσειράς %4, συμπλήρωμα '='

     * @param άγνωστο $string

     */

    δημόσια στατική συνάρτηση urlsafe_b64decode($string) {

        $data = str_replace(πίνακας('-','_'),πίνακας('+','/'),$string);

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

        αν ($mod 4) {

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

        }

        επιστροφή base64_decode($data)·

    }

   

    /**

     * Κωδικοποιημένη βάση URL 64

     * '+' -> '-'

     * '/' -> '_'

     * '=' -> ''

     * @param άγνωστο $string

     */

    συνάρτηση urlsafe_b64encode($string) {

        $data = base64_encode($string)·

        $data = str_replace(πίνακας('+','/','='),πίνακας('-','_',''),$data);

        επιστροφή $data?

    }




OC:



#pragma - Μετατρέψτε τις συμβολοσειρές "-", "_" στην κωδικοποίηση saveBase64 σε "+", "/" και το συμπλήρωμα bit με 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 original: %@", base64Str);

    επιστροφή [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;

}



Ιάβα:

δημόσια στατική συμβολοσειρά safeUrlBase64Encode(byte[] δεδομένα){

Συμβολοσειρά encodeBase64 = νέο BASE64Encoder().encode(data);

Συμβολοσειρά safeBase64Str = encodeBase64.replace('+', '-');

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

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

επιστροφή safeBase64Str;

}


δημόσιο στατικό byte[] safeUrlBase64Decode(τελική συμβολοσειρά safeBase64Str){

Βάση συμβολοσειράς64Str = safeBase64Str.replace('-', '+');

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

int mod4 = base64Str.length()%4;

if(mod4 > 0){

base64Str = βάση64Str + "====".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 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com