o
    Hi                     @   sH   d Z ddlZddlZddlZdd Zdd Zdd Zd	d
 Zdd ZdS )u8   
通用工具函数模块，包含加密解密等功能
    Nc                 C   sX   | sdS t dd tdD }t }t| D ]\}}|||d  A }|| q|| S )u   
    使用随机IV加密数据，返回二进制数据
    参数:
        plain_data: 二进制数据
    返回:
        加密后的二进制数据，前16字节为IV
        c                 S   s   g | ]}t d dqS )r      )randomrandint).0_ r   C/data/storage/obfuscation/tool/ObjectiveC/oc_custom/custom_tools.py
<listcomp>   s    z*encrypt_with_random_iv.<locals>.<listcomp>   )bytesrange	bytearray	enumerateappend)
plain_dataivencrypted_dataibytecipher_byter   r   r	   encrypt_with_random_iv   s   r   c                 C   sb   t | dk rdS | dd }| dd }t }t|D ]\}}|||d  A }|| qt|S )u   
    解密：从前16字节取IV，再滚动异或还原明文
    参数:
        encrypted_data: 加密后的二进制数据，前16字节为IV
    返回:
        解密后的二进制数据
    r   r   N)lenr   r   r   r   )r   r   cipher_datar   r   r   
plain_byter   r   r	   decrypt_with_random_iv   s   r   c              
      s   t  }z+t| d t fdddD ]}|| qW d   n1 s&w   Y  | W S  tyL } ztd|  d|  W Y d}~dS d}~ww )	u'   
    计算文件的 MD5 哈希值
    rbc                      s
     dS )Ni   )readr   fr   r	   <lambda>?   s   
 z$calculate_file_md5.<locals>.<lambda>r   Nu   计算文件 u    的 MD5 失败: u   计算失败)hashlibmd5openiterupdate	hexdigest	Exceptionprint)	file_pathmd5_hashchunker   r   r	   calculate_file_md57   s   
r-   c                 C   s   t | d S )u0   将二进制数据转换为十六进制字符串ascii)binasciihexlifydecodeupper)datar   r   r	   data_to_hexG   s   r4   c                 C   s
   t | S )u0   将十六进制字符串转换为二进制数据)r/   	unhexlify)
hex_stringr   r   r	   hex_to_dataK   s   
r7   )	__doc__r   r!   r/   r   r   r-   r4   r7   r   r   r   r	   <module>   s    