web-dev-qa-db-de.com

Entfernen Sie die neue Zeile "\ n" aus base64-kodierten Zeichenfolgen in Python3?

Ich versuche, eine HTTPS-Verbindung in Python3 herzustellen, und wenn ich versuche, meinen Benutzernamen und mein Kennwort zu verschlüsseln, gibt die Methode base64encodebytes den verschlüsselten Wert mit einem neuen Zeilenzeichen am Ende "\ n" zurück Fehler beim Versuch, eine Verbindung herzustellen. 

Gibt es eine Möglichkeit, der base64-Bibliothek mitzuteilen, dass beim Kodieren kein neues Zeilenzeichen angehängt wird, oder wie kann dieses neue Zeilenzeichen am besten entfernt werden? Ich habe versucht, die replace-Methode zu verwenden, erhalte jedoch die folgende Fehlermeldung: 

Traceback (most recent call last):
  File "data_consumer.py", line 33, in <module>
    auth_base64 = auth_base64.replace('\n', '')
TypeError: expected bytes, bytearray or buffer compatible object

Mein Code:

auth = b'[email protected]:passWORD'
auth_base64 = base64.encodebytes(auth)
auth_base64 = auth_base64.replace('\n', '')

Irgendwelche Ideen? Vielen Dank

16
Mo.

Verwenden Sie statt encodestring die Verwendung von b64encode. Später fügt keine \n-Zeichen hinzu. z.B.

In [11]: auth = b'[email protected]:passWORD'

In [12]: base64.encodestring(auth)
Out[12]: b'dXNlcm5hbWVAZG9tYWluLmNvbTpwYXNzV09SRA==\n'

In [13]: base64.b64encode(auth)
Out[13]: b'dXNlcm5hbWVAZG9tYWluLmNvbTpwYXNzV09SRA=='

Es erzeugt einen identischen codierten String mit Ausnahme von \n.

45
Mandar Vaze

Der folgende Code würde funktionieren

auth_base64 = auth_base64.decode('utf-8').replace('\n', '')
6
Sarit Adhikari

Ich stimme der Beobachtung von Mandar zu , dass base64.xxxx_encode() ohne Zeilenumbruch \n ausgegeben würde.

Für diejenigen, die ein sichereres Verständnis als nur eine Beobachtung wünschen, sind dies die offiziellen Versprechen, die ich zu diesem Thema finden kann. Die Python 3-Dokumentation erwähnt base64.encode(...) - fügt nach jeweils 76 Bytes Ausgabe Zeilenumbrüche hinzu. Im Vergleich dazu erwähnen alle anderen *_encode(...)-Funktionen überhaupt kein Zeilenumbruchverhalten, was als "kein Zeilenumbruchverhalten" angesehen werden kann. Für was es wert ist, erwähnt die Python 2-Dokumentation nichts über Zeilenumbruch.

0
RayLuo

für python3 verwenden: -

binascii.b2a_base64 (cipher_text, newline = False )

für python2 verwenden:

binascii.b2a_base64 (cipher_text) [: -1]

0
Harsh