将机密信息(Payload)嵌入至载体图像中,并返回隐写后的图像字节流。
(self, msg: bytes, msg_filename: Optional[str],
cover: Optional[bytes], cover_filename: Optional[str],
stego_filename: Optional[str])
| 51 | self.config = config |
| 52 | |
| 53 | def embed_data(self, msg: bytes, msg_filename: Optional[str], |
| 54 | cover: Optional[bytes], cover_filename: Optional[str], |
| 55 | stego_filename: Optional[str]) -> bytes: |
| 56 | """将机密信息(Payload)嵌入至载体图像中,并返回隐写后的图像字节流。""" |
| 57 | if Purpose.DATA_HIDING not in self.plugin.get_purposes(): |
| 58 | raise StegaPyException( |
| 59 | "插件不支持数据隐藏", |
| 60 | StegaPyErrors.PLUGIN_DOES_NOT_SUPPORT_DH, |
| 61 | self.NAMESPACE |
| 62 | ) |
| 63 | |
| 64 | try: |
| 65 | # 压缩数据(如果启用) |
| 66 | if self.config.is_use_compression(): |
| 67 | msg = self._compress_data(msg) |
| 68 | |
| 69 | # 加密数据(如果启用) |
| 70 | if self.config.is_use_encryption(): |
| 71 | if not self.config.get_password(): |
| 72 | raise StegaPyException( |
| 73 | "加密需要密码", |
| 74 | StegaPyErrors.INVALID_PASSWORD, |
| 75 | self.NAMESPACE |
| 76 | ) |
| 77 | crypto = CryptoUtil(self.config.get_password(), |
| 78 | self.config.get_encryption_algorithm()) |
| 79 | msg = crypto.encrypt(msg) |
| 80 | |
| 81 | # 使用插件嵌入数据 |
| 82 | return self.plugin.embed_data(msg, msg_filename, cover, |
| 83 | cover_filename, stego_filename) |
| 84 | except StegaPyException: |
| 85 | raise |
| 86 | except Exception as e: |
| 87 | raise StegaPyException(str(e), StegaPyErrors.UNHANDLED_EXCEPTION, self.NAMESPACE) |
| 88 | |
| 89 | def extract_data(self, stego_data: bytes, |
| 90 | stego_filename: Optional[str]) -> List: |