Per permettere un certo livello di riservatezza nelle comunicazioni si deve ricorrere a sistemi che vadano a cifrare i dati in transito, facendo in modo che solo il diretto interessato sia in grado di risalire al messaggio reale inviato;
questo tipo di comunicazione deve essere supportata da strumenti che permettano, conosciuta la chiave di decodifica, di andare a decifrare i messaggi/file che sono stati precedentemente cifrati.
Di seguito potete trovare un semplice tool in PHP che permette, una volta ospitato su un server web e utilizzato via browser, di cifrare/decifrare un file con la password da voi scelta.
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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
<?php $ALGORITHM = 'AES-128-CBC'; $IV = '12dasdq3g5b2434b'; $error = ''; if (isset($_POST) && isset($_POST['operazione'])) { $password = isset($_POST['password']) && $_POST['password']!='' ? $_POST['password'] : null; $operazione = isset($_POST['operazione']) && in_array($_POST['operazione'],array('c','d')) ? $_POST['operazione'] : null; $file = isset($_FILES) && isset($_FILES['file']) && $_FILES['file']['error'] == UPLOAD_ERR_OK ? $_FILES['file'] : null; if ($password === null) { $error .= 'Password non valida<br>'; } if ($operazione === null) { $error .= 'Operazione non valida<br>'; } if ($file === null) { $error .= 'Errore nella ricezione del file<br>'; } if ($error === '') { $contenuto = ''; $nomefile = ''; $contenuto = file_get_contents($file['tmp_name']); $filename = $file['name']; switch ($operazione) { case 'c': $contenuto = openssl_encrypt($contenuto, $ALGORITHM, $password, 0, $IV); $filename = $filename . '.crypto'; break; case 'd': $contenuto = openssl_decrypt($contenuto, $ALGORITHM, $password, 0, $IV); $filename = preg_replace('#\.crypto$#','',$filename); break; } if ($contenuto === false) { $error .= 'Errore nei dati di cifratura/decifratura'; } if ($error === '') { header("Pragma: public"); header("Pragma: no-cache"); header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Expires: 0"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"" . $filename . "\";"); $size = strlen($contenuto); header("Content-Length: " . $size); echo $contenuto; die; } } } ?> <html> <head> <title>Cifratura/Decifratura file</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-12" > <h1>Utility per cifratura e decifratura di file</h1> </div> </div> <?php if ($error != '') { ?> <div class="row"> <div class="col-12 alert alert-danger" role="alert"> <?php echo ($error); ?> </div> </div> <?php } ?> <form class="form" enctype="multipart/form-data" method="post" id="form1" name="form1" auto-complete="off"> <div class="form-row"> <div class="form-group"> <label for="file">File da elaborare</label> <input type="file" name="file" id="file" placeholder="Selezionare file" required class="form-control-file"/> </div> </div> <div class="form-row"> <div class="form-group"> <label for="password">Password</label> <input type="password" name="password" id="password" placeholder="Indicare la password" required class="form-control" /> </div> </div> <div class="form-row"> <div class="form-group"> <label for="operazione">Operazione</label> <select name="operazione" id="operazione" required class="form-control"> <option value="">Selezionare azione</option> <option value="c">Cifra</option> <option value="d">Decifra</option> </select> </div> </div> <div class="form-row"> <button type="submit" class="btn btn-primary" onclick="setTimeout('document.form1.reset();',1000)">Esegui</button> <button type="reset" class="btn btn-reset">Annulla</button> </div> </form> </div> <script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script> <script type="text/javascript" src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.bundle.min.js"></script> </body> </html> |