Metadata-Version: 2.4
Name: darren_utils
Version: 0.1.9
Summary: 一个功能丰富的工具包
Home-page: https://github.com/Darren5211314
Author: Darren
Author-email: Darren <2775856@qq.com>
License: MIT
Project-URL: Homepage, https://github.com/Darren5211314
Project-URL: Repository, https://github.com/Darren5211314
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Requires-Dist: setuptools
Requires-Dist: requests
Requires-Dist: pyarmor>=9.0
Requires-Dist: cryptography
Requires-Dist: gmssl
Requires-Dist: send2trash
Requires-Dist: pyperclip
Requires-Dist: psutil
Requires-Dist: pillow
Requires-Dist: wmi
Dynamic: author
Dynamic: home-page
Dynamic: requires-python

# darren_utils

一个功能丰富的Python工具库，包含加密解密、哈希计算、HTTP请求、字符串处理、时间处理、文件操作和硬件信息获取等多种实用功能。

## 安装

```bash
pip install darren_utils
```

## 功能模块

### 网络通信 (fn_net_work)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| FNNetWork | 网络通信类，用于与服务器进行安全通信 | config_data (dict): 配置数据 | FNNetWork对象 |
| FNNetWork.get_token | 获取访问令牌(Token) | 无 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.check_link | 检查服务器连接状态 | 无 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.get_app_up_data_msg | 获取应用更新内容 | 无 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.login | 用户登录 | user (str): 用户名, passwd (str): 密码, device_id (str, optional): 设备ID, tab (str, optional): 标签, app_ver (str, optional): 应用版本 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.get_app_gong_gao | 获取应用公告 | 无 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.get_app_public_data | 获取公共数据 | name (str): 数据名称, is_special (bool, optional): 是否为专用数据 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.GetSystemTime | 获取系统时间 | 无 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.set_user_config | 设置用户配置 | name (str): 配置名称, value (str): 配置值 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.get_user_config | 获取用户配置 | name (str): 配置名称 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.get_app_version | 获取应用版本信息 | version (str): 当前版本号, is_version_all (str): 是否获取所有版本信息 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.check_user_exists | 检查用户是否存在 | user (str): 用户名 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.get_user_viportime | 获取用户VIP时间 | 无 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.heart_beat | 心跳检测 | 无 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.login_out | 用户登出 | 无 | DarrenRet: 包含执行结果的对象 |
| FNNetWork.user_register | 用户注册 | user (str): 用户名, passwd (str): 密码, device_id (str, optional): 设备ID, super_pass_word (str, optional): 超级密码, qq (str, optional): QQ号, email (str, optional): 邮箱, phone (str, optional): 手机号 | DarrenRet: 包含执行结果的对象 |

### JSON处理 (darren_utils)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| json_parse_safe | 安全的JSON处理 | obj (str/dict/list): 待处理对象 | dict/list: 解析后的JSON对象或原对象 |

### RSA加密 (darren_rsa)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| RSACipher | RSA加密/解密和签名/验证封装类 | private_key (str, optional): PEM格式的私钥, public_key (str, optional): PEM格式的公钥 | RSACipher对象 |
| RSACipher.generate_keypair | 生成新的RSA密钥对 | key_size (int): 密钥大小（比特），默认2048位 | tuple: PEM格式的(私钥, 公钥)元组 |
| RSACipher.encrypt | 使用RSA算法加密明文 | plaintext (str): 要加密的文本, public_key (str, optional): PEM格式的公钥, padding_scheme (str): 填充方案 ('OAEP', 'PKCS1', 'NONE') | str: Base64编码的加密密文 |
| RSACipher.decrypt_with_public_key | 使用RSA公钥解密密文（用于特殊情况，如服务器用私钥加密后返回给客户端） | ciphertext (str): Base64编码的密文, public_key (str, optional): PEM格式的公钥, padding_scheme (str): 填充方案 ('OAEP', 'PKCS1') | str: 解密后的明文 |
| RSACipher.decrypt | 使用RSA算法解密密文 | ciphertext (str): Base64编码的密文, private_key (str, optional): PEM格式的私钥, padding_scheme (str): 填充方案 ('OAEP', 'PKCS1') | str: 解密后的明文 |
| RSACipher.sign | 使用RSA算法对数据进行签名 | data (str): 要签名的数据, private_key (str, optional): PEM格式的私钥, padding_scheme (str): 填充方案 ('PSS', 'PKCS1') | str: Base64编码的签名 |
| RSACipher.verify | 使用RSA算法验证签名 | data (str): 原始数据, signature (str): Base64编码的签名, public_key (str, optional): PEM格式的公钥, padding_scheme (str): 填充方案 ('PSS', 'PKCS1') | bool: 如果验证成功返回True，否则返回False |
| rsa_generate_keypair | 生成新的RSA密钥对 | key_size (int): 密钥大小（比特），默认1024位 | tuple: PEM格式的(私钥, 公钥)元组 |
| rsa_encrypt_string | 使用RSA加密字符串 | plaintext (str): 要加密的文本, public_key (str): PEM格式的公钥, padding_scheme (str): 填充方案 ('OAEP', 'PKCS1', 'NONE') | str: Base64编码的加密密文 |
| rsa_decrypt_with_public_key | 使用RSA公钥解密字符串（用于特殊情况，如服务器用私钥加密后返回给客户端） | ciphertext (str): Base64编码的密文, public_key (str): PEM格式的公钥, padding_scheme (str): 填充方案 ('OAEP', 'PKCS1') | str: 解密后的明文 |
| rsa_decrypt_string | 使用RSA解密字符串 | ciphertext (str): Base64编码的密文, private_key (str): PEM格式的私钥, padding_scheme (str): 填充方案 ('OAEP', 'PKCS1', 'NONE') | str: 解密后的明文 |
| rsa_sign | 使用RSA算法对数据进行签名 | data (str): 要签名的数据, private_key (str): PEM格式的私钥, padding_scheme (str): 填充方案 ('PSS', 'PKCS1') | str: Base64编码的签名 |
| rsa_verify | 使用RSA算法验证签名 | data (str): 原始数据, signature (str): Base64编码的签名, public_key (str): PEM格式的公钥, padding_scheme (str): 填充方案 ('PSS', 'PKCS1') | bool: 如果验证成功返回True，否则返回False |

### 网络工具 (darren_utils)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| get_public_ip | 获取公网IP信息，支持16种不同数据源 | ip (str): IP地址, source (int): 获取IP信息的源(0-15) | dict: IP信息字典 |
| url_get_domain | 获取URL的域名 | url (str): URL字符串 | str: 域名 |
| get_jsonp | 解析JSONP字符串并返回JSON对象 | text (str): JSONP字符串 | dict: 解析后的JSON对象 |

#### get_public_ip 数据源详情

get_public_ip 方法支持 16 种不同的数据源（source 参数 0-15），每种数据源提供不同的 IP 信息服务：

- source=0: https://whois.pconline.com.cn/
- source=1: https://api.vore.top/api/IPdata
- source=2: http://demo.ip-api.com/
- source=3: http://httpbin.org/ip
- source=4: https://vv.video.qq.com/checktime
- source=5: https://ipv4.my.ipinfo.app/api/ipDetails.php
- source=6: https://r.inews.qq.com/api/ip2city
- source=7: https://myip.ipip.net/json
- source=8: https://iplark.com/ipstack
- source=9: https://ipservice.ws.126.net/locate/api/getLocByIp
- source=10: https://126.com/fgw/mailsrv-ipdetail/detail (默认)
- source=11: http://only-162333-112-96-112-201.nstool.zhuanzfx.com/info.js
- source=12: https://ipv4.gdt.qq.com/get_client_ip
- source=13: http://fn.syyx.com/my_ip
- source=14: https://www.uc.cn/ip
- source=15: https://who.nie.163.com/

### 硬件信息 (darren_devices)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| GetHardwareInformation | 硬件信息类，用于获取计算机硬件信息 | 无 | GetHardwareInformation对象 |
| get_devices_id | 获取设备指纹ID（基于硬件信息生成的MD5哈希值） | 无 | str: 设备指纹ID |
| GetHardwareInformation.get_board_id | 获取主板序列号 | 无 | str: 主板序列号 |
| GetHardwareInformation.get_bios_id | 获取BIOS序列号 | 无 | str: BIOS序列号 |
| GetHardwareInformation.get_cpu_id | 获取CPU序列号 | 无 | str: CPU序列号 |
| GetHardwareInformation.get_physical_disk_id | 获取硬盘序列号 | 无 | str: 硬盘序列号 |
| GetHardwareInformation.get_gpu_info | 获取显卡信息 | 无 | str: 显卡信息 |
| GetHardwareInformation.get_system_info | 获取系统版本信息 | 无 | str: 系统版本信息 |
| GetHardwareInformation.get_system_uuid | 获取系统UUID | 无 | str: 系统UUID |
| GetHardwareInformation.get_all | 获取所有硬件信息 | 无 | str: 所有硬件信息的文本表示 |
| GetHardwareInformation.get_devices_id | 获取设备指纹ID（基于硬件信息生成的MD5哈希值） | 无 | str: 设备指纹ID |

### 文件操作 (darren_file)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| file_exists | 检查文件是否存在 | file_path (str): 文件路径 | bool: 文件存在返回True，否则返回False |
| dir_exists | 检查目录是否存在 | dir_path (str): 目录路径 | bool: 目录存在返回True，否则返回False |
| file_is_use | 检查文件是否被占用 | file_path (str): 文件路径 | bool: 文件被占用返回True，否则返回False |
| file_open | 打开文件并返回文件句柄 | file_path (str): 文件路径, mode (str): 文件打开模式，默认为'r'(只读) | file object or int: 成功时返回文件句柄，失败时返回-1 |
| file_execute | 执行文件，如运行exe程序或用默认程序打开文件 | file_path (str): 文件路径 | subprocess.Popen or bool or int: 成功时返回进程对象或True，失败时返回-1 |
| file_locate | 在文件管理器中定位文件，打开文件所在目录并选中该文件 | file_path (str): 文件路径 | bool or int: 成功时返回True，失败时返回-1 |
| file_copy | 复制文件 | src_path (str): 源文件路径, dest_path (str): 目标文件路径, overwrite (bool): 是否覆盖已存在的文件，默认为False | bool or int: 成功时返回True，失败时返回-1 |
| file_rename | 重命名文件 | old_name (str): 原文件名, new_name (str): 新文件名 | bool or int: 成功时返回True，失败时返回-1 |
| file_enumerate | 枚举某个目录下的指定类型文件 | directory (str): 欲寻找的目录, pattern (str): 欲寻找的文件名(如果寻找全部文件可以填入*.*，或*.txt只找txt文件, 多个后缀中间用" | "隔开), with_path (bool): 是否带路径(默认为假； 真=带目录路径，如C:\\012.txt； 假=不带，如 012.txt), sort_alpha (bool): 是否按字母排序(默认为假；真=按字母a-z排序 假=不排序), recursive (bool): 是否遍历子目录(默认为假) | list: 成功时返回文件路径列表，失败时返回-1 |
| file_size | 获取文件大小 | file_path (str): 文件路径, unit (str): 返回大小的单位(B、KB、MB、GB)，默认为M | str or int: 成功时返回格式化的文件大小字符串，失败时返回-1 |
| file_get_extension | 获取文件扩展名 | file_path (str): 文件路径 | str or int: 成功时返回文件扩展名（如：.jpg），没有扩展名时返回空字符串，失败时返回-1 |
| file_get_directory | 获取文件所在目录路径 | file_path (str): 文件路径 | str or int: 成功时返回文件所在目录路径，失败时返回-1 |
| file_get_info | 获取文件信息 | file_path (str): 文件路径 | dict or int: 成功时返回包含文件信息的字典，失败时返回-1 |
| file_get_name | 获取文件名 | file_path (str): 文件路径, with_extension (bool): 是否带后缀，默认为False，不带后缀；True为带后缀 | str or int: 成功时返回文件名，失败时返回-1 |
| file_delete | 删除文件 | file_path (str): 文件路径, to_trash (bool): 是否删除到回收站，默认为True（删除到回收站）；False为彻底删除 | bool or int: 成功时返回True，失败时返回-1 |

### 字符串处理 (darren_string)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| string_random_string | 生成随机字符串 | length (int): 字符串长度 | str: 随机字符串 |
| string_get_between | 获取两个字符串之间的内容 | text (str): 原始文本, start (str): 起始字符串, end (str): 结束字符串 | str: 两个字符串之间的内容 |
| string_get_left | 获取字符串左侧内容 | text (str): 原始文本, separator (str): 分隔符 | str: 分隔符左侧的内容 |
| string_get_right | 获取字符串右侧内容 | text (str): 原始文本, separator (str): 分隔符 | str: 分隔符右侧的内容 |

### 时间处理 (darren_time)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| time_get_timestamp | 获取当前时间戳 | 无 | int: 当前时间戳 |
| time_random_timestamp | 生成随机时间戳 | 无 | int: 随机时间戳 |
| time_format | 格式化时间戳 | timestamp (int): 时间戳, format_str (str): 格式化字符串 | str: 格式化后的时间字符串 |

### HTTP请求 (darren_http)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| darren_http | 发送HTTP请求 | url (str): 请求地址, method (str): 请求方法, headers (dict): 请求头, data (dict): 请求数据 | dict: 响应结果 |
| darren_http_proxy | 发送带代理的HTTP请求 | url (str): 请求地址, method (str): 请求方法, headers (dict): 请求头, data (dict): 请求数据, proxy (str): 代理地址 | dict: 响应结果 |

### 日志处理 (darren_utils)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| save_log | 保存日志到 logs 目录下的指定文件 | filename (str): 日志文件名, log_content (str): 日志内容 | 无返回值 |

#### save_log 方法详解

`save_log` 方法用于将日志内容保存到指定的日志文件中。如果 logs 目录不存在，会自动创建该目录。

**参数说明:**
- `filename`: 日志文件名（不需要包含 .txt 扩展名）
- `log_content`: 要保存的日志内容

**行为特点:**
- 日志文件保存在项目根目录下的 logs 文件夹中
- 如果指定的日志文件不存在，会自动创建
- 日志以追加模式写入，不会覆盖已有内容
- 每条日志前面会自动添加时间戳 `[YYYY-MM-DD HH:MM:SS]`

**示例:**
```python
# 保存日志到 logs/app.log 文件
darren_util.save_log("app", "应用程序启动")

# 保存日志到 logs/error.log 文件
darren_util.save_log("error", "发生了一个错误: 文件未找到")
```

### Cookie处理 (darren_http)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| cookie_dict_to_string | 将字典转换为Cookie字符串 | cookie_dict (dict): Cookie字典 | str: Cookie字符串 |
| cookie_string_to_dict | 将Cookie字符串转换为字典 | cookie_string (str): Cookie字符串 | dict: Cookie字典 |
| cookie_merge | 合并两个Cookie字典 | cookie_dict1 (dict): 第一个Cookie字典, cookie_dict2 (dict): 第二个Cookie字典 | dict: 合并后的Cookie字典 |
| cookie_get_value | 从Cookie中获取指定键的值 | cookie (str/dict/RequestsCookieJar): Cookie, key (str): 键名 | str/None: 键对应的值或None |

#### cookie_get_value 方法详解

`cookie_get_value` 方法可以从不同类型的 Cookie 对象中提取指定键的值，支持以下三种类型：

1. 字符串类型 Cookie (str):
   - 普通 Cookie 字符串格式: `"key1=value1; key2=value2"`
   - Set-Cookie 响应头格式: `"Set-Cookie: key1=value1; Path=/; Domain=.example.com"`

2. 字典类型 Cookie (dict):
   - 标准 Python 字典格式: `{"key1": "value1", "key2": "value2"}`

3. RequestsCookieJar 类型:
   - requests 库使用的 Cookie Jar 对象，通常来自 `response.cookies`

**参数说明:**
- `cookie`: 待提取的 Cookie 对象，可以是 str、dict 或 RequestsCookieJar 类型
- `key`: 要获取值的键名

**返回值:**
- 如果找到对应键且值不为空，则返回对应的值
- 如果未找到对应键或值为空，则返回 None

**示例:**
```python
# 字符串类型 Cookie
cookie_str = "username=admin; sessionid=abc123"
session_id = darren_util.cookie_get_value(cookie_str, "sessionid")
# 返回 "abc123"

# 字典类型 Cookie
cookie_dict = {"username": "admin", "sessionid": "abc123"}
username = darren_util.cookie_get_value(cookie_dict, "username")
# 返回 "admin"

# RequestsCookieJar 类型 Cookie
import requests
response = requests.get("https://example.com")
session_id = darren_util.cookie_get_value(response.cookies, "sessionid")
```

### 哈希算法 (darren_hash)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| hash_md5_string | 计算字符串的MD5哈希值 | text (str): 输入字符串 | str: MD5哈希值 |
| hash_md5_bytes | 计算字节数组的MD5哈希值 | data (bytes): 输入字节数组 | str: MD5哈希값 |
| hash_sha1_string | 计算字符串的SHA1哈希值 | text (str): 输入字符串 | str: SHA1哈希값 |
| hash_sha1_bytes | 计算字节数组的SHA1哈希值 | data (bytes): 输入字节数组 | str: SHA1哈希값 |
| hash_sha256_string | 计算字符串的SHA256哈希值 | text (str): 输入字符串 | str: SHA256哈希값 |
| hash_sha256_bytes | 计算字节数组的SHA256哈希值 | data (bytes): 输入字节数组 | str: SHA256哈希값 |
| hash_sha512_string | 计算字符串的SHA512哈希值 | text (str): 输入字符串 | str: SHA512哈希값 |
| hash_sha512_bytes | 计算字节数组的SHA512哈希값 | data (bytes): 输入字节数组 | str: SHA512哈希값 |
| hash_crc32_int | 计算数据的CRC32值 | data (bytes): 输入数据 | int: CRC32값 |

### HMAC算法 (darren_hmac)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| hmac_md5 | 使用MD5算法计算HMAC | key (str): 密钥, message (str): 消息 | str: HMAC값 |
| hmac_sha1 | 使用SHA1算法计算HMAC | key (str): 密钥, message (str): 消息 | str: HMAC값 |
| hmac_sha256 | 使用SHA256算法计算HMAC | key (str): 密钥, message (str): 消息 | str: HMAC값 |
| hmac_sha512 | 使用SHA512算法计算HMAC | key (str): 密钥, message (str): 消息 | str: HMAC값 |
| hmac_sha3_256 | 使用SHA3-256算法计算HMAC | key (str): 密钥, message (str): 消息 | str: HMAC값 |
| hmac_sha3_512 | 使用SHA3-512算法计算HMAC | key (str): 密钥, message (str): 消息 | str: HMAC값 |

### CRC32算法 (darren_rc4)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| hash_crc32_int | 计算数据的CRC32값 | data (bytes): 输入数据 | int: CRC32값 |

### RC4加密 (darren_rc4)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| rc4_encrypt_string | 使用RC4算法加密字符串 | key (str): 密钥, plaintext (str): 明文 | str: 加密后的字符串 |
| rc4_decrypt_string | 使用RC4算法解密字符串 | key (str): 密钥, ciphertext (str): 密文 | str: 解密后的字符串 |
| RC4 | RC4加密类 | key (bytes): 密钥 | RC4对象 |

### AES加密 (darren_aes)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| AESCipher | AES加密类 | key (str): 密钥 | AESCipher对象 |
| aes_encrypt_string | 使用AES算法加密字符串 | key (str): 密钥, plaintext (str): 明文 | str: 加密后的字符串 |
| aes_decrypt_string | 使用AES算法解密字符串 | key (str): 密钥, ciphertext (str): 密文 | str: 解密后的字符串 |

### DES加密 (darren_des)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| DESCipher | DES加密类 | key (str): 密钥 | DESCipher对象 |
| des_encrypt_string | 使用DES算法加密字符串 | key (str): 密钥, plaintext (str): 明文 | str: 加密后的字符串 |
| des_decrypt_string | 使用DES算法解密字符串 | key (str): 密钥, ciphertext (str): 密文 | str: 解密后的字符串 |

### 3DES加密 (darren_3des)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| TDESCipher | 3DES加密类 | key (str): 密钥 | TDESCipher对象 |
| tdes_encrypt_string | 使用3DES算法加密字符串 | key (str): 密钥, plaintext (str): 明文 | str: 加密后的字符串 |
| tdes_decrypt_string | 使用3DES算法解密字符串 | key (str): 密钥, ciphertext (str): 密文 | str: 解密后的字符串 |

### JavaScript兼容3DES加密 (darren_3des_js)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| TDESCipher_JS | JavaScript兼容的3DES加密类 | key (str): 密钥 | TDESCipher_JS对象 |
| tdes_encrypt_string_js | 使用JavaScript兼容的3DES算法加密字符串 | key (str): 密钥, plaintext (str): 明文 | str: 加密后的字符串 |
| tdes_decrypt_string_js | 使用JavaScript兼容的3DES算法解密字符串 | key (str): 密钥, ciphertext (str): 密文 | str: 解密后的字符串 |

### SM2加密 (darren_sm2)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| SM2Cipher | SM2加密类 | 无 | SM2Cipher对象 |
| sm2_generate_keypair | 生成SM2密钥对 | 无 | tuple: (私钥, 公钥) |
| sm2_encrypt_string | 使用SM2算法加密字符串 | public_key (str): 公钥, plaintext (str): 明文 | str: 加密后的字符串 |
| sm2_decrypt_string | 使用SM2算法解密字符串 | private_key (str): 私钥, ciphertext (str): 密文 | str: 解密后的字符串 |
| sm2_sign | 使用SM2算法签名 | private_key (str): 私钥, message (str): 消息 | str: 签名 |
| sm2_verify | 使用SM2算法验证签名 | public_key (str): 公钥, message (str): 消息, signature (str): 签名 | bool: 验证成功返回True，否则返回False |

### SM3哈希 (darren_sm3)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| hash_sm3_string | 计算字符串的SM3哈希值 | text (str): 输入字符串 | str: SM3哈希값 |
| hash_sm3_bytes | 计算字节数组的SM3哈希值 | data (bytes): 输入字节数组 | str: SM3哈希값 |

### SM4加密 (darren_sm4)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| SM4Cipher | SM4加密类 | key (str): 密钥 | SM4Cipher对象 |
| sm4_encrypt_string | 使用SM4算法加密字符串 | key (str): 密钥, plaintext (str): 明文 | str: 加密后的字符串 |
| sm4_decrypt_string | 使用SM4算法解密字符串 | key (str): 密钥, ciphertext (str): 密文 | str: 解密后的字符串 |

### JavaScript兼容RSA加密 (js_rsa)

| 方法名 | 描述 | 参数 | 返回값 |
|--------|------|------|--------|
| JSRSA | JavaScript兼容的RSA加密类 | 无 | JSRSA对象 |
| js_rsa_generate_keypair | 生成JavaScript兼容的RSA密钥对 | key_size (int): 密钥长度 | tuple: (私钥, 公钥) |
| js_rsa_public_encrypt | 使用公钥加密 | public_key (str): 公钥, plaintext (str): 明文, padding (int or AsymmetricPadding): 填充方式 | str: 加密后的字符串 |
| js_rsa_private_decrypt | 使用私钥解密 | private_key (str): 私钥, ciphertext (str): 密文, padding (int or AsymmetricPadding): 填充方式 | str: 解密后的字符串 |
| js_rsa_private_encrypt | 使用私钥加密 | private_key (str): 私钥, plaintext (str): 明文, padding (int or AsymmetricPadding): 填充方式 | str: 加密后的字符串 |

### 统一返回结果类 (darren_ret)

| 方法名 | 描述 | 参数 | 返回值 |
|--------|------|------|--------|
| DarrenRet | 统一返回结果类，用于封装接口返回结果 | success (bool): 执行结果, message (str): 提示信息, data (Optional[T]): 业务数据, error_code (Optional[str]): 错误码, timestamp (int): 时间戳, extra (Optional[Dict[str, Any]]): 扩展信息 | DarrenRet对象 |
| DarrenRet.success | 创建成功的返回实例 | message (str): 提示信息, data (Optional[T]): 业务数据 | DarrenRet对象 |
| DarrenRet.error | 创建失败的返回实例 | message (str): 提示信息, error_code (Optional[str]): 错误码, data (Optional[T]): 业务数据 | DarrenRet对象 |
| DarrenRet.get_error_code | 获取错误码 | 无 | Optional[str]: 错误码 |
| DarrenRet.get_message | 获取提示信息 | 无 | str: 提示信息 |
| DarrenRet.is_success | 判断是否成功 | 无 | bool: 是否成功 |
| DarrenRet.get_data | 获取业务数据 | 无 | Optional[T]: 业务数据 |
| DarrenRet.get_data_json | 获取业务数据并转换为JSON格式 | 无 | Dict[str, Any]: JSON格式的业务数据 |
| DarrenRet.is_error | 判断是否失败 | 无 | bool: 是否失败 |
| DarrenRet.to_dict | 转换为字典格式 | 无 | Dict[str, Any]: 字典格式的结果 |
| DarrenRet.to_json | 转换为JSON字符串 | 无 | str: JSON字符串 |

## 使用示例

```
import darren_util

# 文件操作示例
if darren_util.file_exists("example.txt"):
    print("文件存在")

files = darren_util.file_enumerate(".", "*.py")
print("Python文件列表:", files)

# 字符串处理示例
random_str = darren_util.string_random_string(10)
print("随机字符串:", random_str)

# 时间处理示例
timestamp = darren_util.time_get_timestamp()
print("当前时间戳:", timestamp)

# HTTP请求示例
response = darren_util.darren_http("https://httpbin.org/get")
print("HTTP响应:", response)

# 哈希计算示例
md5_hash = darren_util.hash_md5_string("hello world")
print("MD5哈希值:", md5_hash)

# 加密解密示例
encrypted = darren_util.aes_encrypt_string("mykey", "hello world")
decrypted = darren_util.aes_decrypt_string("mykey", encrypted)
print("AES加密解密:", decrypted)

# 硬件信息示例
device_id = darren_util.get_devices_id()
print("设备指纹ID:", device_id)

# 获取详细硬件信息
hardware_info = darren_util.GetHardwareInformation()
print("主板序列号:", hardware_info.get_board_id())
print("CPU序列号:", hardware_info.get_cpu_id())
print("系统信息:", hardware_info.get_system_info())
```

## 许可证

MIT
