|
@@ -10,6 +10,7 @@ from itertools import groupby
|
|
|
|
|
|
import cv2
|
|
|
import requests
|
|
|
+import bitstring
|
|
|
from loguru import logger
|
|
|
from Crypto.Hash import BLAKE2b
|
|
|
|
|
@@ -86,17 +87,7 @@ def extract_image(path):
|
|
|
for j in range(cols):
|
|
|
r, g, b = im[i, j]
|
|
|
|
|
|
- byte = 0
|
|
|
- byte |= 1 << (r & 1)
|
|
|
- byte |= 1 << ((r >> 1) & 1)
|
|
|
- byte |= 1 << ((g >> 1) & 1)
|
|
|
- byte |= 1 << ((g >> 1) & 1)
|
|
|
- byte |= 1 << ((b >> 1) & 1)
|
|
|
- byte |= 1 << ((b >> 1) & 1)
|
|
|
- byte |= 1 << ((r >> 2) & 1)
|
|
|
- byte |= 1 << ((r >> 2) & 1)
|
|
|
-
|
|
|
- data.append(byte)
|
|
|
+ data.extend((r, g, b))
|
|
|
|
|
|
return bytes(data)
|
|
|
|
|
@@ -136,18 +127,17 @@ def extract_lsbs(data):
|
|
|
buffer = []
|
|
|
|
|
|
data = [k for k, _ in groupby(data)]
|
|
|
- data = chunks(data, 4)
|
|
|
+ data = chunks(data, 8)
|
|
|
|
|
|
for chunk in data:
|
|
|
- if len(chunk) != 4:
|
|
|
+ if len(chunk) != 8:
|
|
|
break
|
|
|
|
|
|
- tmp_byte = 0
|
|
|
- for byte in chunk:
|
|
|
- for n in range(2):
|
|
|
- tmp_byte |= 1 << ((byte >> n) & 1)
|
|
|
+ ba = bitstring.BitArray(8)
|
|
|
+ for i, byte in zip(range(len(chunk)), chunk):
|
|
|
+ ba[i] = byte & 1
|
|
|
|
|
|
- buffer.append(tmp_byte)
|
|
|
+ buffer.append(ba.u)
|
|
|
|
|
|
return bytes(buffer)
|
|
|
|