Ein Typ, der das Rauschen anhand eines vorgegebenen Codes berechnet und ins Bild setzt. Entschlüsselbar.
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]. ↑ 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! ↓ Okay, du kannst es nicht mehr benutzen!
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, Ich tat dies! Was ist, wenn ich "ore mo waru katta" eingebe? gut gemacht.
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. 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?
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 ...