MCPcopy Create free account
hub / github.com/MearaY/StegaPy / LSBDataHeader

Class LSBDataHeader

StegaPy/plugin/lsb/lsb_data_header.py:9–185  ·  view source on GitHub ↗

LSB数据头类,用于存储嵌入数据的元信息

Source from the content-addressed store, hash-verified

7
8
9class LSBDataHeader:
10 """LSB数据头类,用于存储嵌入数据的元信息"""
11
12 # 数据头标记(9字节)
13 DATA_STAMP = b"STEGAPY " # 9字节,StegaPy项目标记
14 HEADER_VERSION = b'\x02' # 1字节,版本2
15 FIXED_HEADER_LENGTH = 8 # 固定头长度
16 CRYPT_ALGO_LENGTH = 8 # 加密算法名称长度
17 MAX_FILENAME_LENGTH = 255 # 最大文件名长度
18
19 def __init__(self, data_length=0, channel_bits_used=1, filename=None, config=None):
20 """初始化数据头
21
22 Args:
23 data_length: 数据长度(不包括头)
24 channel_bits_used: 每个颜色通道使用的位数
25 filename: 文件名
26 config: StegaPyConfig配置对象
27 """
28 self.data_length = data_length
29 self.channel_bits_used = channel_bits_used
30 self.filename = filename or ""
31 self.config = config
32
33 if len(self.filename.encode('utf-8')) > self.MAX_FILENAME_LENGTH:
34 raise ValueError(f"文件名编码后长度不能超过{self.MAX_FILENAME_LENGTH}字节")
35
36 def get_data_length(self):
37 """获取数据长度"""
38 return self.data_length
39
40 def get_filename(self):
41 """获取文件名"""
42 return self.filename
43
44 def get_channel_bits_used(self):
45 """获取每个通道使用的位数"""
46 return self.channel_bits_used
47
48 def to_bytes(self):
49 """转换为字节数组"""
50 filename_bytes = self.filename.encode('utf-8')
51 filename_len = len(filename_bytes)
52
53 if filename_len > self.MAX_FILENAME_LENGTH:
54 raise ValueError(f"文件名编码后长度超过{self.MAX_FILENAME_LENGTH}字节")
55
56 # 构建头数据
57 header = bytearray()
58
59 # 1. DATA_STAMP (9字节)
60 header.extend(self.DATA_STAMP)
61
62 # 2. HEADER_VERSION (1字节)
63 header.extend(self.HEADER_VERSION)
64
65 # 3. FIXED_HEADER (8字节)
66 # dataLength (4字节,小端序)

Callers 3

__init__Method · 0.85
__init__Method · 0.85
from_bytesMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected