Frage

Ich denke, das eine dumme Frage sein muss, aber warum die Ergebnisse der urlsafe_b64encode do () immer mit einem ‚=‘ Ende für mich? '=' Ist nicht url sicher?

from random import getrandbits
from base64 import urlsafe_b64encode
from hashlib import sha256
from time import sleep

def genKey():
   keyLenBits = 64
   a = str(getrandbits(keyLenBits))
   b = urlsafe_b64encode(sha256(a).digest())
   print b

while 1:
   genKey()
   sleep(1)

Ausgabe:

DxFOVxWvvzGdOSh2ARkK-2XPXNavnpiCkD6RuKLffvA=
xvA99ZLBrLvtf9-k0-YUFcLsiKl8Q8KmkD7ahIqPZ5Y=
jYbNK7j62KCBA5gnoiSpM2AGOPxmyQTIJIl_wWdOwoY=
CPIKkXPfIX4bd8lQtUj1dYG3ZOBxmZTMkVpmR7Uvu4s=
HlTs0tBW805gaxfMrq3OPOa6Crg7MsLSLnqe-eX0JEA=
FKRu0ePZEppHsvACWYssL1b2uZhjy9UU5LI8sWIqHe8=
aY_kVaT8kjB4RRfp3S6xG2vJaL0vAwQPifsBcN1LYvo=
6Us3XsewqnEcovMb5EEPtf4Fp4ucWfjPVso-UkRuaRc=
_vAI943yOWs3t2F6suUGy47LJjQsgi_XLiMKhYZnm9M=
CcUSXVqPNT_eb8VXasFXhvNosPOWQQWjGlipQp_68aY=
War es hilfreich?

Lösung

Base64 Anwendungen '=' für Polsterung. Ihre Zeichenfolge Bitlänge ist nicht teilbar durch 24, so dass es mit ‚=‘ aufgefüllt. By the way, sollte '=' sein URL sicher, da es häufig für die Parameter in URLs verwendet wird.

Siehe dieser Diskussion auch.

Andere Tipps

Die '=' ist für Polsterung. Wenn Sie die Ausgabe als Wert eines URL-Parameter übergeben möchten, sollten Sie es zunächst entkommen, so dass die Polsterung nicht verloren geht, wenn später in dem Wert zu lesen.

import urllib
param_value = urllib.quote_plus(b64_data)

Python ist nur RFC3548 nachfolgend zum Auffüllen des ‚=‘ erlaubt, auch wenn es wie ein geeignetere Charakter scheint es soll ersetzt werden.

Ich würde erwarten, dass ein URI-Parser eines „=“ im Wert Teil eines Parameters ignorieren würde.

Die URI-Parameter sind: "&", [name] "=" [Wert], als nächstes, so ein Gleichheitszeichen im Wert Teil ist harmlos. Ein unescaped Ampersand hat mehr Potenzial, den Parser zu brechen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top