Comment stocker la sortie d'Os.urandom (8) dans CouchDB?
-
14-11-2019 - |
Question
J'essaie de stocker des données cryptographiques dans CouchDB. J'ai besoin de stocker un sel et un mot de passe crypté dans CouchDB. Le sel est généré à l'aide de l'os.urandom de Python (8) et la sortie de l'échantillon de cela ressemblerait à:
'z/\xfe\xdf\xdeJ=y'
J'utilise l'API Python-Couchdb pour stocker le document. Quand j'essaie de sauvegarder le document, j'obtiens:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "build/bdist.macosx-10.7-intel/egg/couchdb/client.py", line 343, in __setitem__
status, headers, data = resource.put_json(body=content)
File "build/bdist.macosx-10.7-intel/egg/couchdb/http.py", line 499, in put_json
**params)
File "build/bdist.macosx-10.7-intel/egg/couchdb/http.py", line 514, in _request_json
headers=headers, **params)
File "build/bdist.macosx-10.7-intel/egg/couchdb/http.py", line 510, in _request
credentials=self.credentials)
File "build/bdist.macosx-10.7-intel/egg/couchdb/http.py", line 260, in request
body = json.encode(body).encode('utf-8')
File "build/bdist.macosx-10.7-intel/egg/couchdb/json.py", line 68, in encode
return _encode(obj)
File "build/bdist.macosx-10.7-intel/egg/couchdb/json.py", line 129, in <lambda>
dumps(obj, allow_nan=False, ensure_ascii=False)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 204, in encode
return ''.join(chunks)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfe in position 3: ordinal not in range(128)
La solution
Encodez-le sous forme de base64 ou en tant qu'hex, avant de l'enregistrer, ou enregistrez-le dans un champ binaire.
Autres conseils
Encoder la sortie de l'urandom dans la base 64 comme ceci:
os.urandom(8).encode('base64')
Selon l'exemple dans ce fil de discussion
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow