سؤال

وأعتقد أن هذا يجب أن يكون سؤال غبي، ولكن لماذا لا نتائج urlsafe_b64encode () تنتهي دائما مع '=' بالنسبة لي؟ '=' غير URL آمن؟

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)

والإخراج:

DxFOVxWvvzGdOSh2ARkK-2XPXNavnpiCkD6RuKLffvA=
xvA99ZLBrLvtf9-k0-YUFcLsiKl8Q8KmkD7ahIqPZ5Y=
jYbNK7j62KCBA5gnoiSpM2AGOPxmyQTIJIl_wWdOwoY=
CPIKkXPfIX4bd8lQtUj1dYG3ZOBxmZTMkVpmR7Uvu4s=
HlTs0tBW805gaxfMrq3OPOa6Crg7MsLSLnqe-eX0JEA=
FKRu0ePZEppHsvACWYssL1b2uZhjy9UU5LI8sWIqHe8=
aY_kVaT8kjB4RRfp3S6xG2vJaL0vAwQPifsBcN1LYvo=
6Us3XsewqnEcovMb5EEPtf4Fp4ucWfjPVso-UkRuaRc=
_vAI943yOWs3t2F6suUGy47LJjQsgi_XLiMKhYZnm9M=
CcUSXVqPNT_eb8VXasFXhvNosPOWQQWjGlipQp_68aY=
هل كانت مفيدة؟

المحلول

باستخدام Base64 الاستخدامات '=' لحشية. طول سلسلة بت ليست القسمة على 24، لذلك فمن مبطن مع '='. بالمناسبة، '=' يجب أن يكون URL آمنة كما انها غالبا ما تستخدم لالمعلمات في عناوين المواقع.

هذه المناقشة أيضا.

نصائح أخرى

وو'=' هو للالحشو. إذا كنت ترغب في تمرير الانتاج حيث بلغت قيمة معلمة URL، فأنت تريد أن يهرب لأول مرة، بحيث الحشو لا تضيع عند قراءة في وقت لاحق في القيمة.

import urllib
param_value = urllib.quote_plus(b64_data)

وبيثون هو مجرد التالية RFC3548 من خلال السماح لل'=' لحشية، على الرغم من أنه يبدو وكأنه شخصية أكثر ملاءمة يجب أن يحل محله.

وأتوقع أن محلل URI أن يتجاهل "=" في الجزء قيمة معلمة.

والمعلمات URI هي: "&"، [اسم]، "="، [قيمة]، المقبل، وذلك علامة يساوي في الجزء قيمة غير مؤذية. العطف يمكن إلغاؤه لديها اكثر المحتملين لكسر محلل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top