File size: 3,650 Bytes
c3a814a 0fd032c c3a814a 0fd032c c3a814a 0940b20 c3a814a 0fd032c c3a814a 0fd032c c3a814a 0fd032c c3a814a 0fd032c c3a814a 5b0a7e4 0940b20 c3a814a 42bca7e 0940b20 42bca7e 0940b20 c3a814a 0fd032c 42bca7e 0fd032c 42bca7e 0fd032c 42bca7e c3a814a 0fd032c c3a814a 0940b20 c3a814a 0940b20 c3a814a 0940b20 c3a814a 0940b20 c3a814a 5b0a7e4 c3a814a 0940b20 5b0a7e4 c3a814a 0940b20 c3a814a 0940b20 c3a814a eb9d562 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
import os
import io
import wave
import struct
import logging
from flask import Flask, render_template, request, send_file, jsonify
from werkzeug.utils import secure_filename
app = Flask(__name__)
logging.basicConfig(level=logging.DEBUG)
logger = app.logger
UPLOAD_FOLDER = '/tmp'
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'mp3', 'wav', 'txt', 'pdf'}
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/')
def index():
return render_template('index.html')
@app.route('/process', methods=['POST'])
def process_file():
logger.info("Processing file request received")
if 'file' not in request.files:
logger.error("No file part in the request")
return jsonify({'error': 'No file part'}), 400
file = request.files['file']
if file.filename == '':
logger.error("No selected file")
return jsonify({'error': 'No selected file'}), 400
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(filepath)
logger.info(f"File saved: {filepath}")
factor = int(request.form['factor'])
is_decrypting = filename.lower().endswith('.wav')
logger.info(f"Processing file: {'decrypting' if is_decrypting else 'encrypting'} with factor {factor}")
try:
if is_decrypting:
output, output_filename, mimetype = decrypt_file(filepath, factor)
else:
output, output_filename, mimetype = encrypt_file(filepath, factor)
logger.info(f"File processed successfully. Output size: {len(output)} bytes")
os.remove(filepath)
logger.info(f"Temporary file removed: {filepath}")
return send_file(
io.BytesIO(output),
mimetype=mimetype,
as_attachment=True,
download_name=output_filename
)
except Exception as e:
logger.error(f"Error processing file: {str(e)}")
os.remove(filepath)
return jsonify({'error': str(e)}), 500
logger.error("Invalid file type")
return jsonify({'error': 'Invalid file type'}), 400
def encrypt_file(filepath, factor):
logger.info(f"Encrypting file: {filepath}")
with open(filepath, 'rb') as file:
data = file.read()
# Convert data to audio samples
samples = [ord(byte) * factor for byte in data.decode('latin-1')]
# Create WAV file
output = io.BytesIO()
with wave.open(output, 'wb') as wav_output:
wav_output.setnchannels(1)
wav_output.setsampwidth(2)
wav_output.setframerate(44100)
wav_output.writeframes(struct.pack(f'{len(samples)}h', *samples))
logger.info(f"Encryption complete. Output size: {output.getbuffer().nbytes} bytes")
return output.getvalue(), 'encrypted.wav', 'audio/wav'
def decrypt_file(filepath, factor):
logger.info(f"Decrypting file: {filepath}")
with wave.open(filepath, 'rb') as wav_file:
params = wav_file.getparams()
frames = wav_file.readframes(wav_file.getnframes())
samples = struct.unpack(f'{len(frames)//2}h', frames)
decrypted_data = ''.join(chr(int(sample / factor)) for sample in samples).encode('latin-1')
logger.info(f"Decryption complete. Output size: {len(decrypted_data)} bytes")
return decrypted_data, 'decrypted_file', 'application/octet-stream'
if __name__ == '__main__':
app.run(debug=True) |