import hashlib

def md5_encrypt(text):
    """
    MD5加密字符串（通用方法）
    :param text: 待加密的字符串（需为字符串类型）
    :return: 32位小写MD5哈希值
    """
    # 1. 创建MD5对象
    md5_obj = hashlib.md5()
    # 2. 传入待加密数据（需先编码为bytes，常用utf-8）
    md5_obj.update(text.encode('utf-8'))
    # 3. 获取加密结果（32位小写）
    result = md5_obj.hexdigest()
    return result


def md5_encrypt_file(file_path, chunk_size=8192):
    """
    MD5加密文件（分片读取，避免内存溢出）
    :param file_path: 文件路径
    :param chunk_size: 分片大小（默认8KB）
    :return: 文件的MD5哈希值
    """
    md5_obj = hashlib.md5()
    with open(file_path, 'rb') as f:  # 以二进制模式读取
        while chunk := f.read(chunk_size):  # 分片读取
            md5_obj.update(chunk)
    return md5_obj.hexdigest()


def md5_encrypt_16bit(text):
    """生成16位MD5哈希值"""
    md5_32bit = md5_encrypt(text)
    return md5_32bit[8:24]  # 截取中间16位




# 测试
if __name__ == '__main__':
    # 加密普通字符串
    original_text = "hello world"
    encrypted_text = md5_encrypt(original_text)
    print(f"原字符串：{original_text}")
    print(f"MD5加密结果：{encrypted_text}")  # 输出：5eb63bbbe01eeed093cb22bb8f5acdc3

    file_md5 = md5_encrypt_file("test.txt")
    if file_md5:
        print(f"文件MD5值：{file_md5}")

    print(md5_encrypt_16bit("hello world"))  # 输出：bbbe01eeed093cb2

    auth_app_list = {"zngd":{'app-key': 'wz_guandao', 'app-secret': 'szjq@asyt'}}
    auth_token_list = [md5_encrypt_16bit(f'{app.get("app-key")}:{app.get("app-secret")}') for app in
                       auth_app_list.values()]
    print(auth_token_list)