Как сохранить вывод os.urandom (8) в CouchDB? - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь сохранить некоторые криптографические данные в couchdb. Мне нужно хранить соль и зашифрованный пароль в couchdb. Соль генерируется с помощью Python os.urandom (8), и пример выходных данных будет выглядеть так:

'z/\xfe\xdf\xdeJ=y'

Я использую python-couchdb api для хранения документа. Когда я пытаюсь сохранить документ, я получаю:

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)

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Перед сохранением закодируйте его как base64 или hex, либо сохраните в двоичном поле.

0 голосов
/ 03 апреля 2015

Кодировать выходные данные urandom в base 64 следующим образом:

os.urandom(8).encode('base64')

Согласно примеру в этой теме

...