<script type="text/javascript"> /** *        * XMLHttpRequest level 2 */ function upload(blobOrFile) { var xhr = new XMLHttpRequest(); //    POST,  URL  true=  xhr.open('POST', '/File/UploadFile/', true); //   -   xhr.responseType = "arraybuffer"; //    xhr.setRequestHeader("Content-type", "multipart/form-data"); xhr.onload = function(e) { // ... }; xhr.send(blobOrFile); //   } //      document.querySelector('input[type="file"]').addEventListener('change', function(e) { var file = this.files[0]; //      var reader = new FileReader(); reader.onloadend = function(e) { var result = this.result; //    var arr = new Int8Array(result); var i; //   var newResult = new ArrayBuffer(arr.byteLength); var newRes = new Int8Array(newResult); var keyForEncrypt = $('#keyForEncrypt').val(); for(i = 0; i < arr.byteLength; i++) { //    newRes[i] = arr[i] + parseInt(keyForEncrypt, 10); } //   upload(newRes.buffer); }; //      //   Chrome 11.0.696.68,    FireFox 4.0.1 reader.readAsArrayBuffer(file); }, false); /*** *         , *        Java  *      */ function download() { var xhr = new XMLHttpRequest(); xhr.open('POST', '/File/DownloadFile/', false); xhr.responseType = 'arraybuffer'; xhr.onload = function(e) { var arr = new Int8Array(this.response); // this.response == arr.buffer //     upload(arr.buffer); var result = new Array(arr.byteLength); var keyForDecrypt = $('#keyForDecrypt').val(); for(var i = 0; i < arr.byteLength; i++) { result[i] = arr[i] - parseInt(keyForDecrypt, 10); } saveFileByApplet(result); }; xhr.send(); } function saveFileByApplet(data) { //     var cryptApplet = document.CryptApplet; cryptApplet.saveFile(data); } $(document).ready(function() { $('#saveFileButton').click(function() { download(); }); }); </script>  <script type="text/javascript"> var selectedFile = null; //     document.querySelector('input[type="file"]').addEventListener('change', function(e) { selectedFile = this.files[0];//      }, false); $(document).ready(function() { $('#uploadPictureButton').click(function() { //    -  if(selectedFile != null) { var reader = new FileReader(); reader.onload = function(e) { //    var result = this.result; //   Base64 var base64Result = Base64.encode(result); //   XOR   var keyForEncrypt = $('#keyForEncrypt').val(); var encryptedData = XOREncrypt(base64Result, keyForEncrypt); //   uploadPicture(encryptedData); }; //      reader.readAsBinaryString(selectedFile); } }); $('#downloadPictureButton').click(function() { downloadPicture(); }); }); /** *         5   */ function buildExtension() { if(selectedFile != null) { var ext = ""; var fullName = selectedFile.name; for(var i = fullName.length - 1; i >= 0; i--) { if(fullName[i] == '.') break; else ext += fullName[i]; } ext = ext.split('').reverse().join(''); if(ext.length < 5) { for(var i = 0; i <= 5-ext.length; i++) { ext += " "; } } return ext; } } /** *        * XMLHttpRequest level 2 */ function uploadPicture(picture) { var xhr = new XMLHttpRequest(); //    POST,  URL  true=  xhr.open('POST', '/Picture/UploadPicture/', true); xhr.onload = function(e) { // ... }; var sentData = "jpg " + picture; //   xhr.send(sentData); } /*** *      ,  XOR,  , *        SRC  IMG */ function downloadPicture() { var xhr = new XMLHttpRequest(); xhr.open('POST', '/Picture/DownloadPicture/', true); xhr.onload = function(e) { //  -  Base64,  XOR var result = this.response; //  5  -  var ext = rtrim(result.substr(0, 5)); //   Base64 var base64Data = result.substr(5); var keyForDecrypt = $('#keyForDecrypt').val(); var decryptedData = XORDecrypt(base64Data, keyForDecrypt); //  MIME      var mime = ""; switch (ext) { case "jpeg" : case "jpg" : case "jpe" : mime = "image/jpeg"; break; case "gif" : mime = "image/gif"; break; case "png" : mime = "image/png"; break; default: mime = "image/jpeg"; break; } $('#pict').attr('src', "data:" + mime + ";base64," + decryptedData); }; xhr.send(); } /** *  PHP- rtrim -    */ function rtrim ( str, charlist ) { charlist = !charlist ? ' \\s\u00A0' : (charlist + '').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\\$1'); var re = new RegExp('[' + charlist + ']+$', 'g'); return (str + '').replace(re, ''); } </script>  package ExtPackage; import java.applet.*; import java.io.*; import java.io.FileOutputStream; import javax.swing.JFileChooser; import javax.swing.*; public class CryptApplet extends Applet{ public void saveFile(byte[] data) throws FileNotFoundException, IOException { //     final JFileChooser fc = new JFileChooser(); fc.showSaveDialog(CryptApplet.this); //    ,   File file = fc.getSelectedFile(); OutputStream out = new FileOutputStream(file); //      out.write(data); out.flush(); out.close(); } } Source: https://habr.com/ru/post/130085/
All Articles