在Python中更改结构体数据
我刚开始学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'}}