Jakie zastąpienia znaków należy wykonać, aby kodowanie adresu bazowego 64 było bezpieczne?

Patrząc na bezpieczne kodowanie bazowe URL 64, stwierdziłem, że jest to bardzo niestandardowa rzecz. Pomimo dużej liczby wbudowanych funkcji, które posiada PHP, nie ma jednego dla bezpiecznego kodowania adresów bazowych URL. Na stronie podręcznika dlabase64_encode(), większość komentarzy sugeruje użycie tej funkcjistrtr():

function base64_url_encode($input)
{
     return strtr(base64_encode($input), '+/=', '-_,');
}

Jedynym modułem Perla, jaki mogłem znaleźć w tym obszarze, jestMIME :: Base64 :: URLSafe (źródło), która wewnętrznie wykonuje następującą wymianę:

sub encode ($) {
    my $data = encode_base64($_[0], '');
    $data =~ tr|+/=|\-_|d;
    return $data;
}

W przeciwieństwie do powyższej funkcji PHP, ta wersja Perla całkowicie usuwa znak „=” (równa się), zamiast zastępować go znakiem „,” (przecinek), tak jak robi to PHP. Równa się to znak dopełnienia, więc moduł Perla zastępuje je w razie potrzeby podczas dekodowania, ale ta różnica sprawia, że ​​obie implementacje są niekompatybilne.

Wreszcie funkcja Pythonaurlsafe_b64encode (s) utrzymuje dopełnienie „=”, zachęcając kogoś do wstawieniata funkcja aby usunąć wypełnienie, które jest widoczne w wynikach Google dla„bezpieczny adres URL python base64”:

from base64 import urlsafe_b64encode, urlsafe_b64decode

def uri_b64encode(s):
    return urlsafe_b64encode(s).strip('=')

def uri_b64decode(s):
    return urlsafe_b64decode(s + '=' * (4 - len(s) % 4))

Pragnieniem jest tutaj posiadanie łańcucha, który może być zawarty w adresie URL bez dalszego kodowania, stąd wykreślenie lub tłumaczenie znaków „+”, „/” i „=”. Ponieważ nie ma zdefiniowanego standardu,jaki jest właściwy sposób?

questionAnswers(5)

yourAnswerToTheQuestion