web-dev-qa-db-fra.com

Supprimer la nouvelle ligne "\ n" des chaînes codées en base64 en Python3?

J'essaie d'établir une connexion HTTPS dans Python3 et lorsque j'essaie de coder mon nom d'utilisateur et mon mot de passe, la méthode base64encodebytes renvoie la valeur codée avec un nouveau caractère de ligne à la fin "\ n". C'est pourquoi je reçois un erreur lorsque j'essaie de me connecter. 

Existe-t-il un moyen de dire à la bibliothèque base64 de ne pas ajouter de nouveau caractère de ligne lors du codage ou quel est le meilleur moyen de supprimer ce nouveau caractère de ligne? J'ai essayé d'utiliser la méthode replace mais j'obtiens l'erreur suivante: 

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

Mon code:

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

Des idées? Merci

16
Mo.

Au lieu de encodestring, envisagez d'utiliser b64encode. Ultérieurement, n’ajoute pas de caractères \n. par exemple.

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=='

Il produit une chaîne encodée identique sauf le \n

45
Mandar Vaze

Le code suivant fonctionnerait

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

Je suis d'accord avec l'observation de Mandar que base64.xxxx_encode() produirait une sortie sans retour à la ligne \n.

Pour ceux qui veulent une compréhension plus confiante qu’une simple observation, c’est la promesse officielle (en quelque sorte) que je peux trouver sur ce sujet. La documentation Python 3 mentionne base64.encode(...) ajouterait des nouvelles lignes tous les 76 octets de sortie. Comparées à cela, toutes les autres fonctions *_encode(...) ne mentionnent pas du tout leur comportement de retour à la ligne, ce qui peut sans conteste être considéré comme "sans comportement de retour à la ligne". Pour ce que ça vaut, la documentation Python 2 ne mentionne rien du retour à la ligne.

0
RayLuo

pour l'utilisation de python3: -

binascii.b2a_base64 (cipher_text, newline = False )

pour utiliser python2:

binascii.b2a_base64 (cipher_text) [: -1]

0
Harsh