WtrBits = B i t . t o O lQ # Битовая строка WtrBi ts , # кодирующая водяной знак DatN = Da t .copyQ f o r I in x r an g e ( l en (W t rB i t s ) ): В = WtrBits [I] Val = DatN[I] ValBin = b in (Va l ) NewBin = V a lB i n [ : - l ] NewBin += В # заменяем последний бит NewVal = int (NewB in ,2) # переводим бинарную строку в # целое число DatN [ I ] = NewVal # заменяем старый отсчет # биты внедряются в первые # позиции аудиофайла. w r i t e ( ’wka.wav’ ,Fr,DatN) [Fr,Dat] = r e a d ( ’wka.wav’ ) AnswB = [] f o r I in xrange(8 * len (Wtr ) ) : Val = Da t [ I ] ValBin = b in (Va l ) В = i n t (V a lB i n [ - 1 ] ) AnswB. append(B) Answ = b i t a r r a yO Answ.extend(AnswB) # инициализация списком битов p r i n t Answ . toby te sO # преобразуем в набор байтов >>> Результат работы программы Я автор этого произведения В таком виде водяной знак легко обнаруживается на основе статистики чередования нулей и единиц. Для ликвидации
RkJQdWJsaXNoZXIy MTExODQxMg==