在Python中更改结构体数据

0 投票
2 回答
1139 浏览
提问于 2025-04-16 12:28

我刚开始学Python,遇到了一个我不知道怎么解决的问题。

比如,我有一个结构体,里面有一些成员,比如管理员、berit等等:

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哈希处理,这样就不会以明文形式存储,但我不知道怎么在Python中访问像'pw'这样的字段并重新赋值。

这是我猜测的可能写法:

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

你可以通过字典的方式来访问它。

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

有两个要点:

  • 首先,这并不会改变 data 的值,因为你返回的是它在 DefaultData 中的一个副本。
  • 其次,为了增加安全性,你可能想把 name 字段也包含在哈希中。这样至少就不容易看出两个用户是否使用了相同的密码。
1

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'}}

撰写回答