有空写写blog, :-)

本文介绍了一个Oracle环境下创建MD5函数的方法。通过使用DBMS_OBFUSCATION_TOOLKIT包中的md5过程,实现了将输入字符串转换为MD5哈希值的功能。此函数接收VARCHAR2类型的参数,并返回对应的MD5哈希值。

拿来学习一下,以免忘掉:

CREATE OR REPLACE FUNCTION fn_md5 (input_string IN VARCHAR2)
    RETURN VARCHAR2
IS
    raw_input                        RAW (128)
                                           := UTL_RAW.cast_to_raw (input_string);
    decrypted_raw                    RAW (2048);
    error_in_input_buffer_length     EXCEPTION;
BEGIN
    DBMS_OBFUSCATION_TOOLKIT.md5 (input => raw_input,
                                  checksum => decrypted_raw
                                 );
    RETURN LOWER (RAWTOHEX (decrypted_raw));
END;

<think>我们使用PyYAML库来读取YAML文件。首先确保安装了PyYAML,如果没有,可以通过pip install PyYAML安装。 然后,我们可以使用yaml.safe_load函数来读取YAML文件内容。 假设YAML文件名为whitelist.yaml,内容如上所示。 读取步骤: 1. 导入yaml模块。 2. 使用open函数打开文件。 3. 使用yaml.safe_load加载文件内容,它会将YAML内容转换成Python字典。 例如,对于上面的YAML结构,转换后的Python字典将有一个键'EC2_ID_WHITELIST',其值是一个字典,该字典的键是CVE编号,值是对应的列表(白名单ID列表或空列表)。 示例代码: ```python import yaml # 打开并读取YAML文件 with open('whitelist.yaml', 'r') as file: data = yaml.safe_load(file) # 现在data是一个字典,我们可以通过键来访问 ec2_whitelist = data.get('EC2_ID_WHITELIST', {}) # 遍历这个字典 for cve_id, instance_list in ec2_whitelist.items(): print(f"CVE ID: {cve_id}") print(f"Instance Whitelist: {instance_list}") ``` 注意:如果YAML文件中有空列表,那么在Python中对应的值就是一个空列表。 如果YAML文件在读取时出现问题,比如格式错误,yaml.safe_load会抛出异常,所以最好用try-except处理。 另外,如果文件路径不对,open会抛出FileNotFoundError。 所以,完整的代码可以加上异常处理: ```python import yaml try: with open('whitelist.yaml', 'r') as file: data = yaml.safe_load(file) except FileNotFoundError: print("文件未找到") except yaml.YAMLError as e: print(f"YAML解析错误: {e}") else: ec2_whitelist = data.get('EC2_ID_WHITELIST', {}) for cve_id, instance_list in ec2_whitelist.items(): print(f"CVE ID: {cve_id}, Whitelisted Instances: {instance_list}") ``` 这样,我们就可以安全地读取YAML文件并处理其中的数据了。 </think>在Python中读取YAML文件(特别是你提供的这种嵌套字典格式),可以使用PyYAML库。以下是完整的解决方案: ```python import yaml # 1. 安装PyYAML库(如果尚未安装) # pip install pyyaml # 2. 读取YAML文件 with open('your_file.yaml', 'r') as file: data = yaml.safe_load(file) # 使用safe_load防止执行恶意代码 # 3. 访问具体数据 ec2_whitelist = data['EC2_ID_WHITELIST'] # 示例:获取CVE-2021-45046的白名单列表 cve_id = "CVE-2021-45046" whitelist_items = ec2_whitelist.get(cve_id, []) # 安全获取,默认返回空列表 print(f"{cve_id}的白名单实例:") for item in whitelist_items: print(f"- {item}") # 处理空列表情况 if not whitelist_items: print(f"⚠️ {cve_id}没有配置白名单实例") ``` ### 关键说明: 1. **数据结构**:读取后YAML内容会被解析为嵌套字典: ```python { 'EC2_ID_WHITELIST': { 'CVE-2021-45046': ['xxx', 'xxx'], 'CVE-2021-44228': [], ... } } ``` 2. **安全加载**:务必使用`yaml.safe_load()`而非`yaml.load()`,避免安全风险 3. **空列表处理**:使用`.get(key, default)`方法安全访问,避免KeyError 4. **遍历所有CVE**: ```python for cve, instance_list in ec2_whitelist.items(): print(f"{cve}: {len(instance_list)}个白名单实例") ``` ### 文件格式要求 确保YAML文件格式正确(示例): ```yaml EC2_ID_WHITELIST: CVE-2021-45046: - instance-1 - instance-2 CVE-2021-44228: [] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值