Veröffentlichung einer Bibliothek, die Zeichendaten in Python-Bildern verbirgt

Veröffentlicht am 2016.04.01 Eine Bibliothek, die Zeichendaten in Bildern mit Python verbirgt. Sie können es auch über die Befehlszeile ausführen. Funktioniert mit Python2-Serien.

install

install


pip install steganography

Beispiel für die Dateneinbettung

Untitled.png

Beispielcode

sample-code


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from steganography.steganography import Steganography

#Text in Bild einbetten
path = "/tmp/image/a.jpg "
output_path = "/tmp/image/b.jpg "
text = 'The quick brown fox jumps over the lazy dog.'
Steganography.encode(path, output_path, text)

#Laden Sie den im Bild ausgeblendeten Text
secret_text = Steganography.decode(output_path)

Beispielbefehl

python


#Text in Bild einbetten
>>>steganography -e /tmp/image/a.jpg /tmp/image/b.jpg 'The quick brown fox jumps over the lazy dog.'

#Laden Sie den im Bild ausgeblendeten Text
>>>steganography -d /tmp/image/b.jpg
The quick brown fox jumps over the lazy dog.

1. Einbettung des Operationsübersichtstextes

1-1. normalize Scannen Sie alle Pixel im Bild und wählen Sie die Pixel mit einem Rest von 1 aus, wenn jeder RGB-Wert durch 8 geteilt wird. Ändern Sie die Farbe des ausgewählten Pixels so, dass der Rest nicht 1 ist.

■ Pixel, deren Farbe durch Normalisieren der Verarbeitung geändert wurde スクリーンショット 2016-03-31 19.36.12.png

1-2. Text versteckt

Konvertieren Sie Text in hexadezimal. Teilen Sie das Bild in 16 Pixel und ändern Sie den Wert der Pixelfarbe des entsprechenden Teils so, dass der Rest 1 wird, wenn jeder RGB-Wert durch 8 geteilt wird.

2. Betriebsübersicht - Lesen Sie den im Bild ausgeblendeten Text

2-1. Text lesen

Lesen Sie das Bild mit verstecktem Text, teilen Sie das Bild in 16 Pixel und identifizieren Sie die Punktpixel, an denen die Pixelfarbe 1 ist, wenn jeder RGB-Wert durch 8 geteilt wird. Der Hexadezimalwert wird von der Punktpixelposition erfasst, von der Hexadezimalzahl in eine Zeichenfolge konvertiert und ausgegeben.

3. Beispiel für einen Implementierungscode für die Studie

3-1. Code, der ein Bild öffnet und Pixel für Pixel liest

Sie können das Bild einfach mit einem Kissen bedienen.

open-image


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from PIL import Image

path = "/tmp/image/a.jpg "
img = Image.open(path)
img = img.convert('RGB')

for y in range(img.size[1]):
    for x in range(img.size[0]):
        r, g, b = img.getpixel((x, y))
        print(r, g, b)

output


>>> python sample.py
(44, 81, 110)
(75, 109, 137)
(85, 114, 144)
(69, 99, 127)
(68, 105, 131)
(52, 94, 116)
(65, 103, 124)
(108, 130, 154)
(149, 150, 181)
(164, 148, 184)
(152, 132, 169)
....

3-2. Code zum Ändern der Pixelfarbe einer bestimmten Bedingung in Rot

red


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from PIL import Image

path = "/tmp/image/a.jpg "
output_path = "/tmp/image/sample_red.png "
img = Image.open(path)
img = img.convert('RGB')


def matched_pixel(r, g, b):
    return r % 8 == g % 8 == b % 8 == 1


for y in range(img.size[1]):
    for x in range(img.size[0]):
        r, g, b = img.getpixel((x, y))
        if matched_pixel(r, g, b):
            #Schreiben Sie die angegebenen Koordinaten in Rot um
            img.putpixel((x, y), (255, 0, 0))

img.save(output_path, "PNG", optimize=True)

sample_red.png

3-3. str hex converter

str-hex-converter


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals


def to_hex(s):
    return s.encode("hex")


def to_str(s):
    return s.decode("hex")


base = "aiueo kakikukeko"
print(to_hex(base))
# >>> 616975656f206b616b696b756b656b6f

assert base == to_str(to_hex(base))

4. Quellcode

Pilow wird zum Lesen und Schreiben von Bildern verwendet. Der Quellcode der Bibliothek ist auf github verfügbar. https://github.com/subc/steganography/blob/master/steganography/steganography.py

Recommended Posts

Veröffentlichung einer Bibliothek, die Zeichendaten in Python-Bildern verbirgt
Code lesen von faker, einer Bibliothek, die Testdaten in Python generiert
Verwenden Sie networkx, eine Bibliothek, die Diagramme in Python verarbeitet (Teil 2: Lernprogramm).
Über psd-tools, eine Bibliothek, die psd-Dateien in Python verarbeiten kann
Einführung einer Bibliothek, die unter Python / Windows nicht in pip enthalten war
Erstellt Simple SQLite, eine Python-Bibliothek, die das Erstellen / Einfügen von SQLite-Tabellen vereinfacht
Ein Memo, das ich schnell in Python geschrieben habe
Ein Programm, das doppelte Anweisungen in Python entfernt
Datenanalyse in Python: Ein Hinweis zu line_profiler
Aufgezeichnete Umgebung für die Datenanalyse mit Python
Ich habe PyQCheck, eine Bibliothek, die QuickCheck mit Python ausführen kann, in PyPI registriert.
Ich habe in Python ein Programm erstellt, das FX-CSV-Daten liest und eine große Anzahl von Diagrammbildern erstellt
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
Empfangen Sie Wörterbuchdaten von Python-Programmen mit AppleScript
[Python] So erweitern Sie Variablen in einer Zeichenfolge
Versuchen Sie, in Python nach einem Profil mit einer Million Zeichen zu suchen
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
Erstellt eine Python-Bibliothek DateTimeRange, die Zeitbereiche verarbeitet
Erstellen Sie in Python einen Dekorator, der Argumente dynamisch akzeptiert. Erstellen Sie einen Dekorator
Bis Sie Daten in eine Tabelle in Python einfügen
Ein Server, der POST-Daten mit flask / python wiedergibt
[Python] Eine praktische Bibliothek, die Kanji in Hiragana konvertiert
Veröffentlichen / Hochladen einer in Python erstellten Bibliothek in PyPI
Python-Programm, das ical-Daten in Text konvertiert
MALSS (Einführung), ein Tool, das maschinelles Lernen in Python unterstützt
Ein Hinweis zur Bibliotheksimplementierung, in der Hyperparameter mithilfe der Bayes'schen Optimierung in Python untersucht werden
[Python] Lassen Sie nur Elemente im Array, die mit einer bestimmten Zeichenfolge beginnen
Ein Memo, das mit Python & Spark Daten aus dashDB liest
Machen Sie einen Screenshot in Python
Behandeln Sie Umgebungsdaten in Python
Zeigen Sie DICOM-Bilder mit rudimentärem Python als Mediziner an
Python-Programm von "Buch, das schwieriges Programmieren leicht lehrt"
Base64-Codierung von Bildern in Python 3
Ein Allzweckprogramm, das Linux-Befehlszeichenfolgen mit Python formatiert
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Eine Funktion, die iterable in Python in N Teile unterteilt
[Python] Erstellen eines GUI-Tools, das die CSV von Temperaturanstiegsdaten in Excel automatisch verarbeitet
Zeigen Sie UTM-30LX-Daten in Python an
Durchlaufen Sie einen Generator, der einen Datumsiterator in Python zurückgibt
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Entwickelte eine Bibliothek, um die Kindle-Sammlungsliste in Python abzurufen
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.
Überschreiben Sie Bibliotheksfunktionen in Python
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
Erstellen Sie ein Lesezeichen in Python
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
[MQTT / Python] Implementierte eine Klasse, die Pub / Sub von MQTT in Python ausführt
Versuchen Sie, ein neuronales Netzwerk in Python aufzubauen, ohne eine Bibliothek zu verwenden
Zeichne ein Herz in Python
Python-Skript, das MLB-Spieldaten im Wert von 15 Jahren in 10 Minuten in MySQL speichert (Baseball Hack!)
Python-Programm, das die Zeitnutzung aus icalendar-Daten aggregiert
In Python gelernter Zeichencode
Eine Reihe von Skriptdateien, die Wordcloud mit Python3 ausführen
Ein Python-Skript, das Oracle-Datenbankdaten in CSV konvertiert
Spielen Sie Sounds in Python ab, vorausgesetzt, die Tastatur ist eine Klaviertastatur
Eine einfache Datenanalyse von Bitcoin, die von CoinMetrics in Python bereitgestellt wird
Ein Memo, das doppelte Anführungszeichen in voller Breite mit regulären Python-Ausdrücken verarbeitet
Einfach! Implementieren Sie einen Twitter-Bot, der auf Heroku in Python ausgeführt wird
[Einführung in Python] So geben Sie eine Zeichenfolge in einer Print-Anweisung aus