[PYTHON] Verschlüsseln Sie das Bild beim Drücken fälschlicherweise

was ist das

Ein Typ, der das Rauschen anhand eines vorgegebenen Codes berechnet und ins Bild setzt. Entschlüsselbar.

Inhaltsverzeichnis

  1. Verschlüsselung
  2. Entschlüsselung
  3. Lassen Sie den Code anwenden 4, Nachschrift

Verschlüsselung

Entscheiden Sie den Code der Zeichenfolge und berechnen Sie den ASCII-Code. Berechnen Sie die Anzahl der Zeilen und den Rest der Verschlüsselungslänge für jede Zeile des Bildes, um den Rauschwert zu erhalten. Fügt allen Pixeln in der Zeile Rauschen hinzu.

Zum Beispiel ist mein Code "ore mo waru katta" (ich war auch schlecht) → _ →. Der ASCII-Code lautet [111, 114, 101, 95, 109, 111, 95, 119, 97, 114, 117, 95, 107, 97, 116, 116, 97]. gmag.jpg ↑ Ich werde dem Rauschen hinzufügen

encode.py


def encode(x,key):
    return ((255,x+key) if x+key<=255 else (0,x-255+key))

↑ Damit wird der Wert des Rauschens berechnet, das in das Pixel eingefügt werden soll. Addieren Sie Rauschen zum Pixelwert, subtrahieren Sie 255, wenn er 255 überschreitet, und geben Sie 0 und das Ergebnis der Berechnung zurück. Wenn 1 nicht überschritten wird, geben Sie 1 und das Ergebnis zurück. Es tut mir leid, dass es zu einfach ist. .. .. Tun Sie dies also für das gesamte Bild.

encode_img.py


def encode_image(img):
    ori_img = plt.imread(img)
    encode_img = np.array(ori_img,dtype='uint8')
    with open('{}_code.txt'.format(img[:-4]),'w') as f:
        for sub_array in encode_img[:,:,-1]:
            f.write(str(list(sub_array)).replace('[','').replace(']','')+',')
    f.close()
    for x in range(encode_img.shape[0]):
        for y in encode_img[x]:
            y[-1] == 255
            key = password[x%len(password)]
            y[-1],y[1] = (encode(y[1],key))
    img_name = 'encode_'+img[:-4]+'.png'
    plt.imshow(encode_img)
    print(img_name)
    plt.imsave(img_name,encode_img)

Dem zweiten Kanal des Pixels wird Rauschen hinzugefügt, und der vierte Kanal wird als "Flag" zum Subtrahieren von "255" verwendet. Durch Setzen auf 0, wenn es subtrahiert wird, und auf 1, wenn es nicht subtrahiert wird, wird entschieden, ob 255 basierend auf dem Wert des 4. Kanals beim Decodieren addiert werden soll. (Diese Methode scheint übrigens dumm zu sein ...) (Da ich den 4. Kanal des Originalbildes für eine perfekte Dekodierung kennen muss, habe ich ihn in txt gespeichert ...) (Es wird mehr wie ein Narr ...) Wann! Nach der Verschlüsselung sieht das vorherige Bild so aus! ↓ gmag.png Okay, du kannst es nicht mehr benutzen!

Entschlüsselung

Subtrahieren Sie den Wert, der dem 2. Kanal hinzugefügt wurde, und kopieren Sie den 4. Kanal des Originalbilds direkt in den 4. Kanal ... (Es scheint hier wirklich dumm zu sein) Übrigens ist der 4. Kanal des Originalbildes 'Bildname_code Ich habe es in .txt 'gespeichert.

decode.py


def decode(x,flag,key):
    return (x-key if flag==255 else x+255-key)

↑ Dieses Flag ist übrigens der numerische Wert des 4. Kanals. Bitten Sie hier die andere Partei, den Code einzugeben und den eingegebenen ASCII-Code als Entschlüsselungsschlüssel zu verwenden. Mit anderen Worten, Sie können nur dann richtig entschlüsseln, wenn Sie den richtigen Code eingeben.

decode_img.py


def test(input_):
    for file in os.listdir():
        if file.endswith('.png'):
            encode_img = plt.imread(file)
            encode_img = np.array(encode_img*255,dtype='uint8')
            img = copy.deepcopy(encode_img)
            with open (file[:-4]+'_code.txt','r') as f:
                txt = f.read()
            f.close()
            code_array = np.fromstring(txt, dtype=int, sep=',')
            code_array = code_array.reshape(encode_img.shape[:2])
            input_password = []
            for i in str(input_):
                input_password.append(ord(str(i)))
            print('password:',input_password)
            for x in range(img.shape[0]):
                for y in img[x]:
                    key = input_password[x%len(input_password)]
                    y[1] = decode(y[1],y[-1],key)
            img[:,:,-1] = code_array
            plt.imsave('result/{}.jpg'.format(file[:-4]+input_),img)
            print('result saved as /result/{}.jpg'.format(file[:-4]+input_))

if __name__=='__main__':
    test(input('please input the password:\n'))

Wenn Sie beispielsweise "onigunsou" (Dämonenkrieger) eingeben, gmagonigunsou.jpg Ich tat dies! Was ist, wenn ich "ore mo waru katta" eingebe? gmagore mo waru katta.jpg gut gemacht.

Holen Sie sich den Code angewendet

Der Rest ist einfach.

guess_password.py


password = [111, 114, 101, 95, 109, 111, 95, 119, 97, 114, 117, 95, 107, 97, 116, 116, 97]
init = '---_--_----_-----'

def guess_password(ate):
    guess = input('please guess the password\n')
    for i in guess:
        if ord(i) in password and  i not in ate:
            ate.append(i)
    print(ate)
    result = ''
    for  j in range(len(password)):
        result +=(chr(password[j]) if chr(password[j]) in ate else init[j])
    print(result)
    return result

def start():
    init = '---_--_----_-----'
    ate = ['_']
    result = guess_password(ate)
    while not all(chr(k) in ate for k in password):
        result = guess_password(ate)
    print('Glückwunsch! Das Passwort ist{}Wissen Sie.\n Ich war auch schlecht.'.format(result))

if __name__ == '__main__':
    start()

Und bitten Sie sie, den Code zu erraten. Übrigens sieht es so aus. スクリーンショット 2020-01-16 17.18.04.png Selbst wenn Sie aufgrund von Gewalt alle englischen Buchstaben eingeben, können Sie es lösen ... Es ist ein Kryptosystem, das freundlich zu der anderen Partei ist, nicht wahr?

Nachtrag

S-kun bat mich, ein Diagramm zu erstellen, aber am nächsten Tag geriet ich in einen Kampf. Natürlich war ich schlecht, aber mein Gegner war auch ein Dämonenkrieger. .. .. Um ehrlich zu sein, war ich ein bisschen wütend und wollte es nicht senden. aber! Selbst wenn Sie sagen, dass Sie einsam sind, werden Sie tun, was Sie tun sollten. Wenn Sie dies nicht tun, werden Sie zu einer Person ohne Verantwortungsbewusstsein. Ich dachte, ich schickte eine der Grafiken, die ich gemacht hatte, gab meine Schuld zu und sagte: "Es tut mir leid. Es tut mir leid." Die Antwort der anderen Partei kam jedoch zu spät und er schrieb stolz: "Bitte geben Sie mir noch eine."

Ich glaube nicht, dass irgendjemand es benutzen wird, also habe ich den Code mäßig geschrieben. Nun, es war eine Programmierpraxis und es hat Spaß gemacht! Ich habe das Gefühl, ich habe die ganze Weisheit meines Lebens benutzt ...

Recommended Posts

Verschlüsseln Sie das Bild beim Drücken fälschlicherweise
Verhalten bei Container Trainable = False in Keras
Liste der selbst erstellten Docker-Bilder
Optimale Platzierung mehrerer Bilder
Beschleunigen Sie das Laden von Python-Bildern