mirror of https://github.com/dirtbags/moth.git
42 lines
944 B
Python
42 lines
944 B
Python
from socket import *
|
|
from hashlib import md5
|
|
import sys
|
|
|
|
plaintext = open('clever_girl.jpg', 'rb').read()
|
|
|
|
try:
|
|
src_port = int(sys.argv[1])
|
|
dest_ip = sys.argv[2]
|
|
dest_port = int(sys.argv[3])
|
|
except:
|
|
print "Usage: python sender.py src_port dest_ip dest_port"
|
|
sys.exit(1)
|
|
|
|
key = 'why am I the key'
|
|
data = [ord(c) for c in plaintext]
|
|
ciphertext = [key]
|
|
hasher = md5(key)
|
|
for c in data:
|
|
digest = hasher.digest()
|
|
hasher.update(digest)
|
|
ciphertext.append(chr(c ^ ord(digest[0])))
|
|
ciphertext = ''.join(ciphertext)
|
|
print ciphertext[:16]
|
|
|
|
key = ciphertext[:16]
|
|
hasher = md5(key)
|
|
decrypted = []
|
|
for c in ciphertext[16:]:
|
|
digest = hasher.digest()
|
|
hasher.update(digest)
|
|
decrypted.append(chr(ord(c) ^ ord(digest[0])))
|
|
decrypted = ''.join(decrypted)
|
|
|
|
assert decrypted == plaintext
|
|
|
|
sock = socket(AF_INET, SOCK_STREAM)
|
|
addr = ("", src_port)
|
|
sock.bind((addr))
|
|
sock.connect((dest_ip, dest_port))
|
|
sock.send(ciphertext)
|