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

Class RandomLSBPlugin

StegaPy/plugin/randlsb/random_lsb_plugin.py:17–154  ·  view source on GitHub ↗

RandomLSB(随机最低有效位)隐写插件

Source from the content-addressed store, hash-verified

15
16
17class RandomLSBPlugin(StegaPyPlugin):
18 """RandomLSB(随机最低有效位)隐写插件"""
19
20 NAMESPACE = "RandomLSB"
21
22 def __init__(self, config: Optional[LSBConfig] = None):
23 """初始化RandomLSB插件"""
24 super().__init__(config or LSBConfig())
25
26 def get_name(self) -> str:
27 """获取插件名称"""
28 return "RandomLSB"
29
30 def get_purposes(self) -> List[Purpose]:
31 """获取插件支持的用途"""
32 return [Purpose.DATA_HIDING]
33
34 def get_description(self) -> str:
35 """获取插件描述"""
36 return "RandomLSB(随机最低有效位)隐写算法,使用随机序列将数据隐藏在图像像素中,提供更好的安全性"
37
38 def embed_data(self, msg: bytes, msg_filename: Optional[str],
39 cover: Optional[bytes], cover_filename: Optional[str],
40 stego_filename: Optional[str]) -> bytes:
41 """嵌入数据到封面图像"""
42 try:
43 # 如果没有提供封面图像,生成随机图像
44 if cover is None:
45 header_size = LSBDataHeader.get_max_header_size()
46 num_pixels = int(header_size * 8 / 3.0)
47 num_pixels += int(len(msg) * 8 / (3.0 * self.config.get_max_bits_used_per_channel()))
48 image = ImageUtil.generate_random_image(num_pixels)
49 else:
50 image = ImageUtil.byte_array_to_image(cover, cover_filename)
51
52 # 获取密码(如果有)
53 password = self.config.get_password() if self.config else None
54
55 # 使用RandomLSB输出流嵌入数据
56 lsb_os = RandomLSBOutputStream(image, len(msg), msg_filename, self.config, password)
57 lsb_os.write(msg)
58 lsb_os.flush()
59 image = lsb_os.get_image()
60
61 return ImageUtil.image_to_byte_array(image, stego_filename)
62 except Exception as e:
63 raise StegaPyException(str(e), StegaPyErrors.UNHANDLED_EXCEPTION, self.NAMESPACE)
64
65 def extract_msg_filename(self, stego_data: bytes,
66 stego_filename: Optional[str]) -> str:
67 """从隐写数据中提取消息文件名"""
68 try:
69 image = ImageUtil.byte_array_to_image(stego_data, stego_filename)
70 password = self.config.get_password() if self.config else None
71 lsb_is = RandomLSBInputStream(image, self.config, password)
72 return lsb_is.get_data_header().get_filename()
73 except Exception as e:
74 raise StegaPyException(str(e), StegaPyErrors.UNHANDLED_EXCEPTION, self.NAMESPACE)

Callers 3

_make_lsb_pluginFunction · 0.90
_spMethod · 0.90
load_pluginsMethod · 0.85

Calls

no outgoing calls

Tested by 1

_spMethod · 0.72