Ungültige Base64-codierte Zeichenfolge: Die Anzahl der Datenzeichen (61) darf nicht größer als 1 sein und ein VielfachesPython

Python-Programme
Anonymous
 Ungültige Base64-codierte Zeichenfolge: Die Anzahl der Datenzeichen (61) darf nicht größer als 1 sein und ein Vielfaches

Post by Anonymous »

Bei Google Colab erhalte ich die Fehlermeldung im Betreff, obwohl ich meine Zeichenfolge mit drei „=“ auffülle:

Code: Select all

import base64
def decode(q: str) -> bytes:
"""
Decode q-value with URL-safe Base64.
"""
if padding := -len(q) % 4:
q += "=" * padding

try:
data = base64.urlsafe_b64decode(q)
except Exception as e:
print(f"Problem with {q = !r}\n with {len(q) = }, {padding = }:",e)
return

q = 'GzAo4rlgGWP57WHO2G4KnuPaOJJ5X3tXYHJT6GS6GOyDe2bsXUaqYHbEAfust'
decode(q)
Ausgabe:

Code: Select all

Problem with q = 'GzAo4rlgGWP57WHO2G4KnuPaOJJ5X3tXYHJT6GS6GOyDe2bsXUaqYHbEAfust==='
with len(q) = 64, padding = 3:
Invalid base64-encoded string: number of data characters (61) cannot be 1 more than a multiple of 4
Ist das ein bekanntes Problem? Was kann ich tun, wenn ich 61 Byte Daten habe?
PS: Es gibt eine ähnliche Frage für die Länge 13, aber keine Antwort und verwirrende Kommentare (jemand sagt „Sie können 100 ‚=‘s verwenden, Python schneidet ab“, sonst sagt „2 ‚=‘ ist das Maximum“).
BEARBEITEN: Ich verstehe jetzt, dass ich möglicherweise 61 oder eine beliebige Anzahl von Bytes habe Daten, sollte aber niemals einen Base64-codierten String dieser Länge haben. Es stellte sich tatsächlich heraus, dass diese Zeichenfolge aus einer benutzerdefinierten Codierung stammt und ich nur vermutete, dass es sich um (Standard-)Base64 handelte (basierend auf dem Vorhandensein von [0-9A-Za-z-_]). Mittlerweile habe ich herausgefunden, dass es sich um eine benutzerdefinierte Variante handelt: Unter anderem verwenden sie die oben genannten Zeichen in dieser Reihenfolge, um 0-63 darzustellen, ähnlich wie Base62, aber mit den 2 zusätzlichen Zeichen), während Base64 „A“ für 0 usw. verwendet. Außerdem haben sie beliebige Längen, weil variable Anzahlen von Bits aus dem resultierenden „Bitstrom“ „gelesen“ werden, abhängig von zusätzlichen Informationen, die sich aus den dekodierten Daten selbst ergeben.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post