python - मैं एक पायथन urandom को एक स्ट्रिंग में कैसे परिवर्तित कर सकता हूं?




string python-3.x (2)

अगर मैं os.urandom (64) को कॉल करता हूं, तो मुझे 64 यादृच्छिक बाइट्स दिए जाते हैं। एक पायथन स्ट्रिंग में बाइट्स कन्वर्ट करने के संदर्भ में मैंने कोशिश की

a = os.urandom(64)
a.decode()
a.decode("utf-8")

लेकिन ट्रेसबैक त्रुटि यह बताती है कि बाइट्स utf-8 में नहीं हैं।

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 0: invalid start byte

बाइट्स के साथ

b'\x8bz\xaf$\xb6\x93q\xef\x94\x99$\x8c\x1eO\xeb\xed\x03O\xc6L%\xe70\xf9\xd8
\xa4\xac\x01\xe1\xb5\x0bM#\x19\xea+\x81\xdc\xcb\xed7O\xec\xf5\\}\x029\x122
\x8b\xbd\xa9\xca\xb2\x88\r+\x88\xf0\xeaE\x9c'

क्या इन बाइट्स को कुछ स्ट्रिंग प्रस्तुति में डीकोड करने के लिए एक पूर्णप्रवाह विधि है? मैं कई डेटाबेस इंजनों में संबंधित दस्तावेज़ों का ट्रैक रखने के लिए सुडो यादृच्छिक टोकन उत्पन्न कर रहा हूं।


आप बेस -64 एन्कोडिंग का उपयोग कर सकते हैं। इस मामले में:

a = os.urandom(64)
a.encode('base-64')

यह भी ध्यान रखें कि मैं decode बजाय यहां encode का उपयोग कर रहा हूं, क्योंकि decode इसे यूनिकोड में निर्दिष्ट प्रारूप से लेने की कोशिश कर रहा है। तो आपके उदाहरण में, आप यादृच्छिक बाइट्स का इलाज कर रहे हैं जैसे कि वे एक वैध utf-8 स्ट्रिंग बनाते हैं, जो शायद ही कभी यादृच्छिक बाइट्स के मामले में होता है।


आपके पास यादृच्छिक बाइट्स हैं; अगर मैं कभी स्ट्रिंग के लिए डीकोडेबल था तो मुझे आश्चर्य होगा।

यदि आपके पास यूनिकोड स्ट्रिंग है, तो लैटिन -1 से डीकोड करें:

a.decode('latin1')

क्योंकि यह संबंधित यूनिकोड कोड बिंदुओं पर एक-एक-एक करके बाइट्स को मानचित्र करता है।





byte