如何修复Python代码从字典中提取所有MD5哈希值到列表
修复Python代码提取MD5哈希值的问题
我正在编写一段Python代码,目的是从名为example的字典中提取所有MD5哈希值并整理成列表,但当前代码存在问题。请告诉我如何修复这段代码,使其能将所有MD5哈希值存入列表。
注意:每个哈希条目可能缺少部分哈希类型,且仅需修复现有代码,无需完全重写。
原代码
example = { 'iocs': { 'high confidence': { 'domains': ['evil.com', 'bad.com' ], 'ips': ['8.8.8.8'], 'hashes': [{ 'md5': '098F6BCD4621D373CADE4E832627B4F6', 'sha1': 'A94A8FE5CCB19BA61C4C0873D391E987982FBBD3', 'sha256': '9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08' }] }, 'medium confidence': { 'domains': ['test.com', 'lessbad.com'], 'ips': ['10.10.10.10'], 'hashes': [{ 'md5': '5D41402ABC4B2A76B9719D911017C592', 'sha1': 'AAF4C61DDCC5E8A2DABEDE0F3B482CD9AEA9434D', 'sha256': '2CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B9824' }, { 'sha256': '2CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B9824' }] }, 'low confidence': { 'domains': ['nice.com', 'good.com'], 'ips': ['2.2.2.2'], 'hashes': [{ 'md5': '7D793037A0760186574B0282F2F435E7', 'sha1': '7C211433F02071597741E6FF5A8EA34789ABBF43', 'sha256': '486EA46224D1BB4FB680F34F7C9AD96A8F24EC88BE73EA8E5A6C65260E9CB8A7' }] } } } for confidence, indicators in len(range(vendor_data.get('iocs'))): md5s = '' for hash_dict in vendor_data.get('hashes'): if hash_dict['md5']: md5s.append(hash_dict.get(md5))
问题分析与修复
原代码存在多个语法和逻辑错误,以下是修复后的完整代码及对应问题点:
example = { 'iocs': { 'high confidence': { 'domains': ['evil.com', 'bad.com'], 'ips': ['8.8.8.8'], 'hashes': [{ 'md5': '098F6BCD4621D373CADE4E832627B4F6', 'sha1': 'A94A8FE5CCB19BA61C4C0873D391E987982FBBD3', 'sha256': '9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08' }] }, 'medium confidence': { 'domains': ['test.com', 'lessbad.com'], 'ips': ['10.10.10.10'], 'hashes': [{ 'md5': '5D41402ABC4B2A76B9719D911017C592', 'sha1': 'AAF4C61DDCC5E8A2DABEDE0F3B482CD9AEA9434D', 'sha256': '2CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B9824' }, { 'sha256': '2CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B9824' }] }, 'low confidence': { 'domains': ['nice.com', 'good.com'], 'ips': ['2.2.2.2'], 'hashes': [{ 'md5': '7D793037A0760186574B0282F2F435E7', 'sha1': '7C211433F02071597741E6FF5A8EA34789ABBF43', 'sha256': '486EA46224D1BB4FB680F34F7C9AD96A8F24EC88BE73EA8E5A6C65260E9CB8A7' }] } } } # 修复点1:初始化md5s为列表(字符串无法使用append方法) md5s = [] # 修复点2:遍历example['iocs']的键值对,获取每个置信度分组的指标数据 for confidence, indicators in example['iocs'].items(): # 修复点3:遍历当前分组下的hashes列表,用get避免键不存在报错 for hash_dict in indicators.get('hashes', []): # 修复点4:安全判断md5键是否存在,避免KeyError if 'md5' in hash_dict: # 修复点5:用字符串'md5'作为键取值,原代码的md5是未定义变量 md5s.append(hash_dict['md5']) # 输出结果验证 print(md5s)
关键修复说明
- 变量名错误:原代码误用
vendor_data,实际字典变量是example,统一替换为正确变量名 - 外层循环语法错误:原循环写法完全不符合Python语法,改为遍历
example['iocs'].items()获取每个置信度分组 - 容器类型错误:
md5s初始化为字符串'',改为空列表[]才能使用append方法 - 遍历对象错误:内层循环应遍历每个分组下的
hashes列表,而非全局取hashes - 键存在性判断错误:直接用
hash_dict['md5']会在键不存在时抛出KeyError,改为判断'md5' in hash_dict - 参数错误:
hash_dict.get(md5)中的md5是未定义变量,改为字符串'md5',或直接用hash_dict['md5'](已判断键存在)
运行修复后的代码,会输出所有提取到的MD5哈希值列表:
['098F6BCD4621D373CADE4E832627B4F6', '5D41402ABC4B2A76B9719D911017C592', '7D793037A0760186574B0282F2F435E7']
内容的提问来源于stack exchange,提问作者mode101
相关产品推荐
相关产品推荐

