diff --git a/msteg/StegBase.py b/msteg/StegBase.py index e970b28..6c7de39 100644 --- a/msteg/StegBase.py +++ b/msteg/StegBase.py @@ -20,7 +20,7 @@ class StegBase(object): similarly such as JSteg, OutGuess and F3. """ - def __init__(self): + def __init__(self,key=sample_key): """ Constructor of the JPEGSteg class. """ @@ -28,7 +28,7 @@ class StegBase(object): self.cov_jpeg = None self.cov_data = None self.hid_data = None - self.key = None + self.key = key def _get_cov_data(self, img_path): """ @@ -143,6 +143,14 @@ class StegBase(object): (emb_size, verb, duration, (emb_size / duration) / 1000., float(emb_size) / cov_size)) + # set & get + def set_key(self, key): + assert key != None + self.key = key + + def get_key(self): + return self.key + # dummy functions to please pylint def _raw_embed(self, cov_data, hid_data): pass diff --git a/msteg/StegBase.pyc b/msteg/StegBase.pyc index 918b89d..c1170d1 100644 Binary files a/msteg/StegBase.pyc and b/msteg/StegBase.pyc differ diff --git a/msteg/steganography/F4.py b/msteg/steganography/F4.py index 215324a..92aac00 100644 --- a/msteg/steganography/F4.py +++ b/msteg/steganography/F4.py @@ -18,8 +18,7 @@ class F4(StegBase): """ Constructor of the F3 class. """ - StegBase.__init__(self) - self.key = key + StegBase.__init__(self, key) def _get_cov_data(self, img_path): """ @@ -76,7 +75,6 @@ class F4(StegBase): header_size = 4 * 8 size_data, bits_cnt = self._raw_extract(steg_data, header_size) size_data = bits2bytes(size_data) - print size_data size_hd = 0 for i in xrange(4): @@ -144,4 +142,4 @@ class F4(StegBase): return hid_data, j def __str__(self): - return "F4'" + return "F4" diff --git a/msteg/steganography/F4.pyc b/msteg/steganography/F4.pyc index d1fc8c5..22a4453 100644 Binary files a/msteg/steganography/F4.pyc and b/msteg/steganography/F4.pyc differ diff --git a/msteg/steganography/F5.py b/msteg/steganography/F5.py index 6cbd032..3a317fa 100644 --- a/msteg/steganography/F5.py +++ b/msteg/steganography/F5.py @@ -22,27 +22,25 @@ which embedding function (one of JSteg, F3, F4) should be used. import time import math import numpy as np -from stegotool.plugins.steganography.F4.F4 import F4 -from stegotool.util.JPEGSteg import JPEGSteg -from stegotool.util.plugins import describe_annotate_convert -from stegotool.util.plugins import ident, ImagePath, FilePath, NewFilePath +import numpy.random as rnd +from msteg.StegBase import * +from F4 import F4 +import mjsteg +import jpegObj +from common import * -class F5(JPEGSteg): +class F5(StegBase): """ This module has two methods: embed_raw_data to embed data with the F5 algorithm and extract_raw_data to extract data which was embedded previously. """ - def __init__(self, ui, core): + def __init__(self, key=sample_key): """ Constructor of the F5 class. """ - JPEGSteg.__init__(self, ui, core) - self._embed_hook = self._embed_k - self._extract_hook = self._extract_k + StegBase.__init__(self, key) self._embed_fun = None - self.dct_p = None - self.seed = None self.default_embedding = True self.steg_ind = -1 self.excess_bits = None @@ -56,7 +54,7 @@ class F5(JPEGSteg): ("stego image", NewFilePath, str), ("seed", int, int), ("embedding behavior", - ['Default', 'F3', 'JSteg'], str)) + ['Default', 'F3', 'JSteg'], str)) def embed_raw_data(self, src_cover, src_hidden, tgt_stego, seed, embed_fun): """

This method embeds arbitrary data into a cover image. @@ -162,7 +160,7 @@ class F5(JPEGSteg): while not success: self.cov_ind += 1 while cov_data[self.dct_p[self.cov_ind]] == 0 or \ - self.dct_p[self.cov_ind] % 64 == 0: + self.dct_p[self.cov_ind] % 64 == 0: self.cov_ind += 1 if m != cov_data[self.dct_p[self.cov_ind]] & 1: cov_data[self.dct_p[self.cov_ind]] -= \ @@ -176,8 +174,8 @@ class F5(JPEGSteg): k_split = np.zeros(4, np.uint8) for i in xrange(k_split.size): self.steg_ind += 1 - while self.steg_data[self.dct_p[self.steg_ind]] == 0 or\ - self.dct_p[self.steg_ind] % 64 == 0: + while self.steg_data[self.dct_p[self.steg_ind]] == 0 or \ + self.dct_p[self.steg_ind] % 64 == 0: self.steg_ind += 1 k_split[i] = self.steg_data[self.dct_p[self.steg_ind]] & 1 self.k_coeff = self.lookup_tab.merge_words(tuple([0, 0, 0, 0] + @@ -190,7 +188,7 @@ class F5(JPEGSteg): for i, c in enumerate(cov_data): if update_cnt == 0: self._set_progress( - int(30 * (float(i) / float(cov_data.size)))) + int(30 * (float(i) / float(cov_data.size)))) update_cnt = 10000 update_cnt -= 1 # pessimistic, but accurate estimation of the capacity of the image @@ -204,7 +202,7 @@ class F5(JPEGSteg): raise Exception("Cannot fit %d bits in %d DCT coefficients. \ Cover image is too small." % (hid_size, cov_size)) self.ui.display_status('DCT embedding ratio = %f' \ - % (float(hid_size) / float(cov_size))) + % (float(hid_size) / float(cov_size))) k = 1 while True: k += 1 @@ -246,14 +244,14 @@ class F5(JPEGSteg): while remaining_bits > 0: if update_cnt == 0: self._set_progress(30 + int((( - hid_size - remaining_bits) / hid_size) * 70)) + hid_size - remaining_bits) / hid_size) * 70)) update_cnt = int(hid_size / (70.0 * k)) update_cnt -= 1 msg_chunk_size = min(remaining_bits, k) msg_chunk = np.zeros(k, np.int8) cov_chunk = np.zeros(n, np.int32) msg_chunk[0:msg_chunk_size] = hid_data[hid_ind:hid_ind + - msg_chunk_size] + msg_chunk_size] hid_ind += k # get n DCT coefficients @@ -281,8 +279,8 @@ class F5(JPEGSteg): if cov_data[cov_chunk[s - 1]] == 0: # test for shrinkage cov_chunk[s - 1:-1] = cov_chunk[s:] # adjusting cov_ind += 1 - while cov_data[dct_p[cov_ind]] == 0 or\ - dct_p[cov_ind] % 64 == 0: + while cov_data[dct_p[cov_ind]] == 0 or \ + dct_p[cov_ind] % 64 == 0: cov_ind += 1 cov_chunk[n - 1] = dct_p[cov_ind] else: @@ -319,7 +317,7 @@ class F5(JPEGSteg): if self.excess_bits != None: hid_data[hid_ind:hid_ind + self.excess_bits.size] = \ - self.excess_bits + self.excess_bits hid_ind += self.excess_bits.size remaining_bits -= self.excess_bits.size @@ -331,7 +329,7 @@ class F5(JPEGSteg): if update_cnt == 0 and not is_header: self._set_progress(int(((float(num_bits) \ - - remaining_bits) / num_bits) * 100)) + - remaining_bits) / num_bits) * 100)) update_cnt = int(num_bits / (100.0 * k)) update_cnt -= 1 @@ -339,8 +337,8 @@ class F5(JPEGSteg): steg_chunk = [0 for i in xrange(n)] for i in xrange(n): self.steg_ind += 1 - while self.steg_data[dct_p[self.steg_ind]] == 0 or\ - dct_p[self.steg_ind] % 64 == 0: + while self.steg_data[dct_p[self.steg_ind]] == 0 or \ + dct_p[self.steg_ind] % 64 == 0: self.steg_ind += 1 steg_chunk[i] = self.steg_data[dct_p[self.steg_ind]] diff --git a/test_jpeg.py b/test_jpeg.py index 7a05a7f..d18f7b3 100644 --- a/test_jpeg.py +++ b/test_jpeg.py @@ -187,11 +187,11 @@ if __name__ == '__main__': # test_bitbyte() ima = jpegObj.Jpeg("res/test3.jpg",key=sample_key) - imb = jpegObj.Jpeg("res/new.jpg",key=sample_key) + # imb = jpegObj.Jpeg("res/new.jpg",key=sample_key) imc = jpegObj.Jpeg("res/steged.jpg",key=sample_key) print ima.Jgetcompdim(0) - print ima.getkey(),imb.getkey() - diffblocks(imb, ima) + print ima.getkey(),imc.getkey() + diffblocks(ima, imc) # c1 = ima.getCoefBlocks() # c2 = imb.getCoefBlocks() diff --git a/test_steg.py b/test_steg.py index ab6c50d..f5bdcf6 100644 --- a/test_steg.py +++ b/test_steg.py @@ -30,7 +30,7 @@ if __name__ == '__main__': f3test = F4.F4() f3test.embed_raw_data("res/test3.jpg", "res/embeded", "res/steged.jpg") f3test.extract_raw_data("res/steged.jpg", "res/extracted") - + print f3test.get_key() pass -- libgit2 0.21.2