изменение данных в структуре в Python - PullRequest
0 голосов
/ 24 февраля 2011

Я довольно новичок в python, и у меня есть проблема, которую я не знаю, как решить.

Например, у меня есть эта структура с такими членами, как администратор, берит и т. Д .:

DEFAULT_DATA = {
'administrator': {
    'name': 'Admin',
    'pw': 'secret',
    'is_author': False,
    'is_admin': True
}
'berit': {
     'name': 'berit',
    'pw': 'apa',
    'is_author': False,
    'is_admin': False
 }

Эти данные затем доступны с помощью метода, который этот метод:

def DefaultData():
"""Provides default data for Gruyere."""
 return copy.deepcopy(DEFAULT_DATA)

Я хочу сделать хэш md5 для паролей, чтобы они не были в открытом тексте, но я не знаю, как получить доступ к полям, таким как 'pw', и переназначить новое значение в python.

Вот предположение относительно того, что это может быть:

stored_data = data.DefaultData()
for member in stored_data:
   for field in member:
       if field=='pw':
           'pw' = md5.new(salt+pw).hexdigest()    // how do you access the value?

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Значения в stored_data сами являются словарями. Переберите значения и примените ваш алгоритм:

stored_data = data.DefaultData()
for data in stored_data.values():
    data['pw'] = md5(salt + data['pw']).hexdigest()

from pprint import pprint
pprint(stored_data)

Выход

{'administrator': {'is_admin': True,
                   'is_author': False,
                   'name': 'Admin',
                   'pw': '33e7cb694fb6fb2f848af6774d9ff138'},
 'berit': {'is_admin': False,
           'is_author': False,
           'name': 'berit',
           'pw': '00c10978330d65eb0cb739a629b6ed15'}}
1 голос
/ 24 февраля 2011

Доступ к нему осуществляется через интерфейс словаря.

stored_data = data.DefaultData()
for member in stored_data.itervalues():
    member['pw'] =  md5.new(salt + member['pw']).hexdigest()

Два комментария:

  • Во-первых, это не меняет значение в data, потому что вы возвращаете его копию в DefaultData.
  • Во-вторых, в качестве дополнительной защиты вы можете включить поле name в хеш. По крайней мере, так будет неочевидно, если у двух пользователей один и тот же пароль.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...