├── app.html └── app.js /app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Image Encryption 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | 2 | let messages = { 3 | "error_0" : "something went wrong, please try again", 4 | "error_1" : "extension not supported, please try again" 5 | } 6 | 7 | let canvas = document.getElementById("board"); 8 | let canvasCtx = canvas.getContext("2d"); 9 | let imgFile = null; 10 | let imgExt = null; 11 | let cryptX = 4; 12 | let cryptY = 1; 13 | let allowedExtensions = ["jpeg","png"]; 14 | 15 | function ENDECrypt(imgData){ 16 | imgFile = imgData.files[0]; 17 | if(imgFile){ 18 | imgExt = (imgFile.type).split("/")[1]; // uploaded img extension 19 | if(allowedExtensions.includes(imgExt)){ 20 | let reader = new FileReader(); 21 | reader.readAsDataURL(imgFile); 22 | reader.onload = function(){ 23 | let tempImage = new Image(); 24 | tempImage.src = reader.result; 25 | tempImage.onload = function(){ 26 | let iW = canvas.width = this.width; 27 | let iH = canvas.height = this.height; 28 | canvasCtx.drawImage(tempImage, 0, 0, iW, iH); 29 | let pxlArray = Array(); 30 | let subScore = 0; 31 | let pxlData = canvasCtx.getImageData(0,0,cryptX,cryptY).data; 32 | for(let l = 0; l < pxlData.length; l+=4) 33 | pxlArray.push({ 34 | 0: pxlData[l], 35 | 1: pxlData[l+1], 36 | 2: pxlData[l+2] 37 | }); 38 | for(let j = 0; j < pxlArray.length; j++){ 39 | if(j+1 <= pxlArray.length){ 40 | let k1 = pxlArray[j][0]+1 == pxlArray[j][1]; 41 | let k2 = (pxlArray[j][0]+1) + (pxlArray[j][1]); 42 | if(k1 && (k2 == pxlArray[j][2])) 43 | subScore++; 44 | } 45 | } 46 | if(subScore==cryptX*cryptY){ // encrypted 47 | let tokenIndex = pxlArray[0][1]; 48 | let n1 = tokenIndex-1, 49 | n2 = tokenIndex, 50 | n3 = tokenIndex*2; 51 | let nImgData = canvasCtx.getImageData(0, 0, iW, iH); 52 | let nImgPixels = nImgData.data; 53 | for(let k = 0; k < nImgPixels.length; k+=4){ 54 | let m1 = nImgPixels[k], 55 | m2 = nImgPixels[k+1], 56 | m3 = nImgPixels[k+2]; 57 | for(let q = 0; q < 256; q++) // for red 58 | if((n1*q)%255==m1){ 59 | nImgPixels[k] = q; 60 | break; 61 | } 62 | for(let q = 0; q < 256; q++) // for green 63 | if((n2*q)%255==m2){ 64 | nImgPixels[k+1] = q; 65 | break; 66 | } 67 | for(let q = 0; q < 256; q++) // for blue 68 | if((n3*q)%255==m3){ 69 | nImgPixels[k+2] = q; 70 | break; 71 | } 72 | } 73 | canvasCtx.putImageData(nImgData,0 ,0); 74 | }else{ // not encrypted 75 | let tokenIndex = Math.floor(Math.random() * 128); 76 | tokenIndex = (tokenIndex > 127) ? 127 : tokenIndex; 77 | let t1 = tokenIndex-1, 78 | t2 = tokenIndex, 79 | t3 = tokenIndex*2; 80 | let tImgData = canvasCtx.getImageData(0, 0, iW, iH); 81 | let tImgPixels = tImgData.data; 82 | for(let k = 0; k < tImgPixels.length; k+=4){ 83 | if(k < cryptX*cryptY*4){ 84 | tImgPixels[k] = t1; 85 | tImgPixels[k+1] = t2; 86 | tImgPixels[k+2] = t3; 87 | }else{ 88 | let p1 = tImgPixels[k], 89 | p2 = tImgPixels[k+1], 90 | p3 = tImgPixels[k+2]; 91 | tImgPixels[k] = (p1 * t1) % 255; 92 | tImgPixels[k+1] = (p2 * t2) % 255; 93 | tImgPixels[k+2] = (p3 * t3) % 255; 94 | } 95 | } 96 | canvasCtx.putImageData(tImgData,0 ,0); 97 | } 98 | } 99 | } 100 | }else{ 101 | alert(messages["error_1"]); 102 | } 103 | }else{ 104 | alert(messages["error_0"]); 105 | } 106 | } --------------------------------------------------------------------------------